When Directory Server calls a password storage scheme plug-in compare function, it passes that function an input password char * and a stored, encoded password char * from the directory. The compare function returns zero, 0, if the input password matches the password from the directory. The function returns 1 otherwise. The prototype for the example compare function, xorcmp(), is therefore as follows:
static int xorcmp(char * userpwd, char * dbpwd);
Here, userpwd is the input password. dbpwd is the password from the directory. The compare function must encode the input password to compare the result to the password from the directory.
#include "slapi-plugin.h" static int xorcmp(char * userpwd, char * dbpwd) { /* Check the correspondence of the two char by char */ int i, len = strlen(userpwd); for (i = 0; i < len; i++) { if ((userpwd[i] ^ 42) != dbpwd[i]) return 1; /* Different passwords */ } return 0; /* Identical passwords */ }
Notice that Directory Server strips the prefix from the password before passing the value to the compare function. In other words, you need not account for {XOR} in this case.
Not all encoding algorithms have such a trivial compare function.