/* * validate a user */ void cmd_vali(char *v_args) { char user[128]; int newax; struct ctdluser userbuf; extract_token(user, v_args, 0, '|', sizeof user); newax = extract_int(v_args, 1); if (CtdlAccessCheck(ac_aide) || (newax > AxAideU) || (newax < AxDeleted)) { return; } if (CtdlGetUserLock(&userbuf, user) != 0) { cprintf("%d '%s' not found.\n", ERROR + NO_SUCH_USER, user); return; } userbuf.axlevel = newax; userbuf.flags = (userbuf.flags & ~US_NEEDVALID); CtdlPutUserLock(&userbuf); /* If the access level was set to zero, delete the user */ if (newax == 0) { if (purge_user(user) == 0) { cprintf("%d %s Deleted.\n", CIT_OK, userbuf.fullname); return; } } cprintf("%d User '%s' validated.\n", CIT_OK, userbuf.fullname); }
/* * Administrative Set User Parameters */ void cmd_asup(char *cmdbuf) { struct ctdluser usbuf; char requested_user[128]; char notify[SIZ]; int np; int newax; int deleted = 0; if (CtdlAccessCheck(ac_aide)) return; extract_token(requested_user, cmdbuf, 0, '|', sizeof requested_user); if (CtdlGetUserLock(&usbuf, requested_user) != 0) { cprintf("%d No such user.\n", ERROR + NO_SUCH_USER); return; } np = num_parms(cmdbuf); if (np > 1) extract_token(usbuf.password, cmdbuf, 1, '|', sizeof usbuf.password); if (np > 2) usbuf.flags = extract_int(cmdbuf, 2); if (np > 3) usbuf.timescalled = extract_int(cmdbuf, 3); if (np > 4) usbuf.posted = extract_int(cmdbuf, 4); if (np > 5) { newax = extract_int(cmdbuf, 5); if ((newax >= AxDeleted) && (newax <= AxAideU)) { usbuf.axlevel = newax; } } if (np > 7) { usbuf.lastcall = extract_long(cmdbuf, 7); } if (np > 8) { usbuf.USuserpurge = extract_int(cmdbuf, 8); } CtdlPutUserLock(&usbuf); if (usbuf.axlevel == AxDeleted) { if (purge_user(requested_user) == 0) { deleted = 1; } } if (deleted) { snprintf(notify, SIZ, "User \"%s\" has been deleted by %s.\n", usbuf.fullname, (CC->logged_in ? CC->user.fullname : "an administrator") ); CtdlAideMessage(notify, "User Deletion Message"); } cprintf("%d Ok", CIT_OK); if (deleted) cprintf(" (%s deleted)", requested_user); cprintf("\n"); }
int PurgeUsers(void) { struct PurgeList *pptr; int num_users_purged = 0; char *transcript = NULL; syslog(LOG_DEBUG, "PurgeUsers() called"); users_not_purged = 0; switch(config.c_auth_mode) { case AUTHMODE_NATIVE: ForEachUser(do_user_purge, NULL); break; case AUTHMODE_HOST: ForEachUser(do_uid_user_purge, NULL); break; default: syslog(LOG_DEBUG, "User purge for auth mode %d is not implemented.", config.c_auth_mode); break; } transcript = malloc(SIZ); if (users_not_purged == 0) { strcpy(transcript, "The auto-purger was told to purge every user. It is\n" "refusing to do this because it usually indicates a problem\n" "such as an inability to communicate with a name service.\n" ); while (UserPurgeList != NULL) { pptr = UserPurgeList->next; free(UserPurgeList); UserPurgeList = pptr; ++num_users_purged; } } else { strcpy(transcript, "The following users have been auto-purged:\n"); while (UserPurgeList != NULL) { transcript=realloc(transcript, strlen(transcript)+SIZ); snprintf(&transcript[strlen(transcript)], SIZ, " %s\n", UserPurgeList->name); purge_user(UserPurgeList->name); pptr = UserPurgeList->next; free(UserPurgeList); UserPurgeList = pptr; ++num_users_purged; } } if (num_users_purged > 0) CtdlAideMessage(transcript, "User Purge Message"); free(transcript); if(users_corrupt_msg) { CtdlAideMessage(users_corrupt_msg, "User Corruption Message"); free (users_corrupt_msg); users_corrupt_msg = NULL; } if(users_zero_msg) { CtdlAideMessage(users_zero_msg, "User Zero Message"); free (users_zero_msg); users_zero_msg = NULL; } syslog(LOG_DEBUG, "Purged %d users.", num_users_purged); return(num_users_purged); }