int whois_access(struct userrec *user, struct userrec *whois_user) { if (user == whois_user) return 1; struct flag_record fr = { FR_GLOBAL | FR_CHAN, 0, 0, 0 }, whois = { FR_GLOBAL | FR_CHAN, 0, 0, 0}; get_user_flagrec(user, &fr, NULL); get_user_flagrec(whois_user, &whois, NULL); /* Don't show hub bots from leaf bots. */ if (!conf.bot->hub && whois_user->bot && bot_hublevel(whois_user) < 999) return 0; if ( (isowner(whois_user->handle) && !isowner(user->handle)) || (glob_admin(whois) && !glob_admin(fr)) || (glob_owner(whois) && !glob_owner(fr)) || (glob_master(whois) && !glob_master(fr)) || (glob_bot(whois) && !glob_master(fr)) ) return 0; return 1; }
/* * Do the dirty work in checking */ static int chk(char *file) { int *r, n, fd; char **u, *cp; FILE *cfp = NULL; /* * Check for valid cf file name (mostly checking current). */ if (strlen(file) < 7 || file[0] != 'c' || file[1] != 'f') return(0); if (all && (from == host || !strcmp(from, file+6))) return(1); /* * get the owner's name from the control file. */ PRIV_START; fd = safe_open(file, O_RDONLY|O_NOFOLLOW, 0); PRIV_END; if (fd < 0 || (cfp = fdopen(fd, "r")) == NULL) { if (fd >= 0) close(fd); return(0); } while (get_line(cfp)) { if (line[0] == 'P') break; } (void)fclose(cfp); if (line[0] != 'P') return(0); if (users == 0 && requests == 0) return(!strcmp(file, current) && isowner(line+1, file)); /* * Check the request list */ for (n = 0, cp = file+3; isdigit((unsigned char)*cp); ) n = n * 10 + (*cp++ - '0'); for (r = requ; r < &requ[requests]; r++) if (*r == n && isowner(line+1, file)) return(1); /* * Check to see if it's in the user list */ for (u = user; u < &user[users]; u++) if (!strcmp(*u, line+1) && isowner(line+1, file)) return(1); return(0); }
/* * Do the dirty work in checking */ int chk(char *file) { int *r, jnum; char **u; const char *cfhost; FILE *cfp; /* * Check for valid cf file name (mostly checking current). */ if (strlen(file) < 7 || file[0] != 'c' || file[1] != 'f') return(0); jnum = calc_jobnum(file, &cfhost); if (all && (from_host == local_host || !strcmp(from_host, cfhost))) return(1); /* * get the owner's name from the control file. */ seteuid(euid); if ((cfp = fopen(file, "r")) == NULL) return(0); seteuid(uid); while (getline(cfp)) { if (line[0] == 'P') break; } (void) fclose(cfp); if (line[0] != 'P') return(0); if (users == 0 && requests == 0) return(!strcmp(file, current) && isowner(line+1, file, cfhost)); /* * Check the request list */ for (r = requ; r < &requ[requests]; r++) if (*r == jnum && isowner(line+1, file, cfhost)) return(1); /* * Check to see if it's in the user list */ for (u = user; u < &user[users]; u++) if (!strcmp(*u, line+1) && isowner(line+1, file, cfhost)) return(1); return(0); }
static void cmd_dump(struct userrec *u, int idx, char *par) { if (!(isowner(dcc[idx].nick)) && (must_be_owner == 2)) { dprintf(idx, MISC_NOSUCHCMD); return; } if (!par[0]) { dprintf(idx, "Usage: dump <server stuff>\n"); return; } putlog(LOG_CMDS, "*", "#%s# dump %s", dcc[idx].nick, par); dprintf(DP_SERVER, "%s\n", par); }
static void secpass_display(int idx, struct user_entry *e, struct userrec *u) { struct flag_record fr = {FR_GLOBAL, 0, 0, 0 }; get_user_flagrec(dcc[idx].user, &fr, NULL); if (!strcmp(u->handle, dcc[idx].nick) || (glob_admin(fr) && isowner(dcc[idx].nick))) { if (conf.bot->hub) dprintf(idx, " %s: %s\n", e->type->name, e->u.string); else { dprintf(idx, " %s: Hidden on leaf bots.", e->type->name); if (dcc[idx].u.chat->su_nick) dprintf(idx, " Nice try, %s.", dcc[idx].u.chat->su_nick); dprintf(idx, "\n"); } } }