static struct passwd *uname_string_combinations2(char *s,int offset,struct passwd *(*fn)(char *),int N) { ssize_t len = (ssize_t)strlen(s); int i; struct passwd *ret; #ifdef PASSWORD_LENGTH len = MIN(len,PASSWORD_LENGTH); #endif if (N <= 0 || offset >= len) return(fn(s)); for (i=offset;i<(len-(N-1));i++) { char c = s[i]; if (!islower(c)) continue; s[i] = toupper(c); ret = uname_string_combinations2(s,i+1,fn,N-1); if(ret) return(ret); s[i] = c; } return(NULL); }
static struct passwd * uname_string_combinations(char *s,struct passwd * (*fn)(char *),int N) { int n; struct passwd *ret; for (n=1;n<=N;n++) { ret = uname_string_combinations2(s,0,fn,n); if(ret) return(ret); } return(NULL); }
static struct passwd * uname_string_combinations(char *s, TALLOC_CTX *mem_ctx, struct passwd * (*fn)(TALLOC_CTX *mem_ctx, const char *), int N) { int n; struct passwd *ret; for (n=1;n<=N;n++) { ret = uname_string_combinations2(s,mem_ctx,0,fn,n); if(ret) return(ret); } return(NULL); }
static struct passwd *uname_string_combinations2(char *s, TALLOC_CTX *mem_ctx, int offset, struct passwd *(*fn)(TALLOC_CTX *mem_ctx, const char *), int N) { ssize_t len = (ssize_t)strlen(s); int i; struct passwd *ret; if (N <= 0 || offset >= len) return(fn(mem_ctx, s)); for (i=offset;i<(len-(N-1));i++) { char c = s[i]; if (!islower_m((int)c)) continue; s[i] = toupper_m(c); ret = uname_string_combinations2(s, mem_ctx, i+1, fn, N-1); if(ret) return(ret); s[i] = c; } return(NULL); }