u_char * var_ipfwacc(struct variable *vp, oid *name, size_t *length, int exact, size_t *var_len, WriteMethod **write_method) { *write_method = 0; /* assume it isnt writable for the time being */ *var_len = sizeof(ret_val); /* assume an integer and change later if not */ if (header_simple_table(vp,name,length,exact,var_len,write_method,readrule(0))) return (NULL); if (readrule(name[*length-1])){ /* this is where we do the value assignments for the mib results. */ switch(vp->magic) { case IPFWACCINDEX: ret_val = name[*length-1]; return((u_char *) (&ret_val)); case IPFWACCSRCADDR: atoip(0); return((u_char *) (&ret_val)); case IPFWACCSRCNM: atoip(9); return((u_char *) (&ret_val)); case IPFWACCDSTADDR: atoip(19); return((u_char *) (&ret_val)); case IPFWACCDSTNM: atoip(28); return((u_char *) (&ret_val)); case IPFWACCVIANAME: { int i=37; /* position in the rule */ while (rule[i]!=' '&&i<IPFWRULELEN-1) i++; rule[i]=0; return (rule+37); } case IPFWACCVIAADDR: { int i=37; /* position in the rule */ while (rule[i]!=' '&&i<IPFWRULELEN-9) i++; atoip(i+1); return((u_char *) (&ret_val)); } case IPFWACCPROTO: switch (getflags()&IP_FW_F_KIND){ case IP_FW_F_ALL: ret_val=2; return ((u_char *) (&ret_val)); case IP_FW_F_TCP: ret_val=3; return ((u_char *) (&ret_val)); case IP_FW_F_UDP: ret_val=4; return ((u_char *) (&ret_val)); case IP_FW_F_ICMP: ret_val=5; return ((u_char *) (&ret_val)); default: ret_val=1; return((u_char *) (&ret_val)); } case IPFWACCBIDIR: ret_val=((getflags()&IP_FW_F_BIDIR)?2:1); return ((u_char *) (&ret_val)); case IPFWACCDIR: ret_val=(getflags()&(IP_FW_F_ACCTIN|IP_FW_F_ACCTOUT)); if (ret_val==IP_FW_F_ACCTIN) ret_val=2; else if (ret_val==IP_FW_F_ACCTOUT) ret_val=3; else ret_val=1; return ((u_char *) (&ret_val)); case IPFWACCBYTES: getnumeric(4); return ((u_char *) (&ret_val)); case IPFWACCPACKETS: getnumeric(3); return ((u_char *) (&ret_val)); case IPFWACCNSRCPRTS: getnumeric(1); return ((u_char *) (&ret_val)); case IPFWACCNDSTPRTS: getnumeric(2); return ((u_char *) (&ret_val)); case IPFWACCSRCISRNG: ret_val=((getflags()&IP_FW_F_SRNG)?1:2); return ((u_char *) (&ret_val)); case IPFWACCDSTISRNG: ret_val=((getflags()&IP_FW_F_DRNG)?1:2); return ((u_char *) (&ret_val)); case IPFWACCPORT1: case IPFWACCPORT2: case IPFWACCPORT3: case IPFWACCPORT4: case IPFWACCPORT5: case IPFWACCPORT6: case IPFWACCPORT7: case IPFWACCPORT8: case IPFWACCPORT9: case IPFWACCPORT10: getnumeric(5+(vp->magic)-IPFWACCPORT1); return ((u_char *) (&ret_val)); } } return NULL; }
static int bin_chown(char *nam, char **args, Options ops, int func) { struct chownmagic chm; char *uspec = ztrdup(*args), *p = uspec; char *end; chm.nam = nam; if(func == BIN_CHGRP) { chm.uid = -1; goto dogroup; } end = strchr(uspec, ':'); if(!end) end = strchr(uspec, '.'); if(end == uspec) { chm.uid = -1; p++; goto dogroup; } else { struct passwd *pwd; if(end) *end = 0; pwd = getpwnam(p); if(pwd) chm.uid = pwd->pw_uid; else { int err; chm.uid = getnumeric(p, &err); if(err) { zwarnnam(nam, "%s: no such user", p); free(uspec); return 1; } } if(end) { p = end+1; if(!*p) { if(!pwd && !(pwd = getpwuid(chm.uid))) { zwarnnam(nam, "%s: no such user", uspec); free(uspec); return 1; } chm.gid = pwd->pw_gid; } else if(p[0] == ':' && !p[1]) { chm.gid = -1; } else { struct group *grp; dogroup: grp = getgrnam(p); if(grp) chm.gid = grp->gr_gid; else { int err; chm.gid = getnumeric(p, &err); if(err) { zwarnnam(nam, "%s: no such group", p); free(uspec); return 1; } } } } else chm.gid = -1; } free(uspec); return recursivecmd(nam, 0, OPT_ISSET(ops,'R'), OPT_ISSET(ops,'s'), args + 1, OPT_ISSET(ops, 'h') ? chown_dolchown : chown_dochown, recurse_donothing, OPT_ISSET(ops, 'h') ? chown_dolchown : chown_dochown, &chm); }