static int password_lifetime() { void *d, *d1; int status; ni_id dir; ni_namelist nl; status = ni_open(NULL, ".", &d); while (status == NI_OK) { status = ni_pathsearch(d, &dir, "/users"); if (status == NI_OK) { status = ni_lookupprop(d, &dir, "password_lifetime", &nl); if (status == NI_OK) { if (nl.ni_namelist_val[0] != NULL) { ni_free(d); /* free namelist? */ return atoi(nl.ni_namelist_val[0]); } } } d1 = d; status = ni_open(d1, "..", &d); ni_free(d1); } return -1; }
int NetInfoPrefsSource::GetValueByIndex(const char* inKey, UInt32 inIndex, char* ioValue) { ni_status status = NI_OK; ni_namelist nameList = {}; void* localDomain = NULL; ni_id qtssDir = {}; ioValue[0] = '\0'; status = ni_open(NULL, ".", &localDomain); if (status != NI_OK) return false; if (status == NI_OK) status = ni_pathsearch(localDomain, &qtssDir, gQTSSPropertiesPath); if (status == NI_OK) status = ni_lookupprop(localDomain, &qtssDir, inKey, &nameList); if (status == NI_OK) { if (nameList.ni_namelist_len > inIndex) strcpy(ioValue, nameList.ni_namelist_val[inIndex]); else status = NI_BADID; ni_namelist_free(&nameList); } ni_free(localDomain); return (status == NI_OK); }
krb5_error_code KRB5_LIB_FUNCTION krb5_config_parse_file (krb5_context context, const char *fname, krb5_config_section **res) { void *ni = NULL, *lastni = NULL; int i; ni_status nis; ni_id nid; ni_idlist children; krb5_config_section *s; int ret; s = NULL; for (i = 0; i < 256; i++) { if (i == 0) { nis = ni_open(NULL, ".", &ni); } else { if (lastni != NULL) ni_free(lastni); lastni = ni; nis = ni_open(lastni, "..", &ni); } if (nis != NI_OK) break; nis = ni_pathsearch(ni, &nid, "/locations/kerberos"); if (nis == NI_OK) { nis = ni_children(ni, &nid, &children); if (nis != NI_OK) break; nis = ni_idlist2binding(ni, &children, &s); break; } } if (ni != NULL) ni_free(ni); if (ni != lastni && lastni != NULL) ni_free(lastni); ret = (nis == NI_OK) ? 0 : -1; if (ret == 0) { *res = s; } else { *res = NULL; } return ret; }
ni_status ni2_createpath(void *domain, ni_id *dir, char *pathname) { /* make a directory with the given pathname */ ni_status ret; ni_id checkdir; int i, j, len; char *dirname = NULL; bool simple; /* pull out every pathname component and create the directory */ i = 0; while (pathname[i] != '\0') { /* search forward for a path component (a directory) */ simple = true; for (j = i; pathname[j] != '\0' && simple; j++) { if (pathname[j] == '\\' && pathname[j+1] == '/') j+=2; if (pathname[j] == '/') simple = false; } len = j - i; if (!simple) len--; dirname = malloc(len + 1); strncpy(dirname, pathname+i, len); dirname[len] = '\0'; /* advance the pointer */ i = j; /* does this directory exist? */ checkdir = *dir; ret = ni_pathsearch(domain, dir, dirname); /* if it doesn't exist, create it */ if (ret == NI_NODIR) { *dir = checkdir; ret = ni2_createchild(domain, dir, dirname); if (ret != NI_OK) return ret; } free(dirname); } return NI_OK; }
ni_status ni2_pathsearch(void *domain, ni_id *dir, char *pathname) { /* same as pathsearch, but if pathname is an integer */ /* then use it as a directory id */ int i, len; bool is_id; len = strlen(pathname); is_id = true; for (i = 0; i < len && is_id; i++) if (!isdigit(pathname[i])) is_id = false; if (is_id) { dir->nii_object = (UInt32)atoi(pathname); return ni_self(domain, dir); } else { return ni_pathsearch(domain, dir, pathname); } }
static void * domain_for_user(char *uname, char *locn, ni_id * dir) { char *upath; int status; void *d, *d1; struct sockaddr_in server; char *tag; int bytag; if (uname == NULL) return NULL; /* * Find the user in NetInfo. */ upath = malloc(8 + strlen(uname)); sprintf(upath, "/users/%s", uname); if (locn != NULL) { bytag = 1; if (locn[0] == '/') bytag = 0; else if (!strncmp(locn, "./", 2)) bytag = 0; else if (!strncmp(locn, "../", 3)) bytag = 0; if (bytag == 1) { parse_server_tag(locn, &server, &tag); d = ni_connect(&server, tag); if (d == (void *) NULL) return (void *) NULL; } else status = ni_open(NULL, locn, &d); status = ni_pathsearch(d, dir, upath); free(upath); if (status == NI_OK) return d; ni_free(d); return (void *) NULL; } status = ni_open(NULL, ".", &d); while (status == NI_OK) { status = ni_pathsearch(d, dir, upath); if (status == NI_OK) break; d1 = d; status = ni_open(d1, "..", &d); ni_free(d1); } free(upath); if (status == NI_OK) return d; return (void *) NULL; }