|
|
1.1 ! root 1: \File{passwd\-resp.c},{21:34},{Aug 31 1988} ! 2: \L{\LB{\C{}\/* lookup\_service.c \- password lookup service \-\- responder *\/\CE{}}} ! 3: \L{\LB{}} ! 4: \L{\LB{\K{\#include} \<stdio.h\>}} ! 5: \L{\LB{\K{\#include} \<pwd.h\>}} ! 6: \L{\LB{\K{\#include} \S{}\"ryresponder.h\"\SE{}}\Tab{40}{\C{}\/* for generic idempotent responders *\/\CE{}}} ! 7: \L{\LB{\K{\#include} \S{}\"PasswordLookup\-ops.h\"\SE{}}\Tab{40}{\C{}\/* operation definitions *\/\CE{}}} ! 8: \L{\LB{\K{\#include} \S{}\"PasswordLookup\-types.h\"\SE{}}\Tab{40}{\C{}\/* type definitions *\/\CE{}}} ! 9: \L{\LB{}} ! 10: \L{\LB{}} ! 11: \L{\LB{\K{\#define}}\Tab{8}{xalloc(p, type) \!}} ! 12: \L{\LB{}\Tab{8}{((p) = (type) calloc (1, \K{sizeof} *(p)))}} ! 13: \L{\LB{}} ! 14: \L{\LB{\K{\#define}}\Tab{8}{salloc(s) \!}} ! 15: \L{\LB{}\Tab{8}{str2qb ((s), strlen (s), 1)}} ! 16: \L{\LB{}} ! 17: \L{\LB{}} ! 18: \L{\LB{\K{\#ifdef}}\Tab{8}{SYS5}} ! 19: \L{\LB{\K{struct} passwd *getpwnam (), *getpwuid ();}} ! 20: \L{\LB{\K{\#endif}}} ! 21: \L{\LB{}} ! 22: \L{\LB{}} ! 23: \L{\LB{\C{}\/* DATA *\/\CE{}}} ! 24: \L{\LB{}} ! 25: \L{\LB{\K{static} \K{char} *myservice = \S{}\"passwdstore\"\SE{};}} ! 26: \L{\LB{}} ! 27: \L{\LB{}} ! 28: \L{\LB{}\Tab{40}{\C{}\/* OPERATIONS *\/\CE{}}} ! 29: \L{\LB{\K{int}}\Tab{8}{op\_lookupUser (), op\_lookupUID ();}} ! 30: \L{\LB{}} ! 31: \L{\LB{\K{static} \K{struct} dispatch dispatches[] = \{}} ! 32: \L{\LB{ \S{}\"lookupUser\"\SE{}, operation\_PasswordLookup\_lookupUser, op\_lookupUser,}} ! 33: \L{\LB{}} ! 34: \L{\LB{ \S{}\"lookupUID\"\SE{}, operation\_PasswordLookup\_lookupUID, op\_lookupUID,}} ! 35: \L{\LB{}} ! 36: \L{\LB{ NULL}} ! 37: \L{\LB{\};}} ! 38: \L{\LB{}} ! 39: \L{\LB{}} ! 40: \L{\LB{\C{}\/* MAIN *\/\CE{}}} ! 41: \L{\LB{}} ! 42: \L{\LB{\C{}\/* ARGSUSED *\/\CE{}}} ! 43: \L{\LB{}} ! 44: \L{\LB{\Proc{main}main (argc, argv, envp)}} ! 45: \L{\LB{\K{int}}\Tab{8}{argc;}} ! 46: \L{\LB{\K{char} **argv,}} ! 47: \L{\LB{ **envp;}} ! 48: \L{\LB{\{}} ! 49: \L{\LB{ ryresponder (argc, argv, PLocalHostName (), myservice, dispatches,}} ! 50: \L{\LB{}\Tab{8}{table\_PasswordLookup\_Operations, NULLIFP, NULLIFP);}} ! 51: \L{\LB{}} ! 52: \L{\LB{ exit (0);}\Tab{32}{\C{}\/* NOTREACHED *\/\CE{}}} ! 53: \L{\LB{\}}} ! 54: \L{\LB{}} ! 55: \L{\LB{}} ! 56: \L{\LB{\C{}\/* OPERATIONS *\/\CE{}}} ! 57: \L{\LB{}} ! 58: \L{\LB{\K{static} \K{int} op\_lookupUser (sd, ryo, rox, in, roi)}} ! 59: \L{\LB{\K{int}}\Tab{8}{sd;}} ! 60: \L{\LB{\K{struct} RyOperation *ryo;}} ! 61: \L{\LB{\K{struct} RoSAPinvoke *rox;}} ! 62: \L{\LB{caddr\_t}\Tab{8}{in;}} ! 63: \L{\LB{\K{struct} RoSAPindication *roi;}} ! 64: \L{\LB{\{}} ! 65: \L{\LB{ \K{int} result;}} ! 66: \L{\LB{ \K{char} *cp;}} ! 67: \L{\LB{ \K{register} \K{struct} type\_PasswordLookup\_UserName *arg =}} ! 68: \L{\LB{}\Tab{16}{(\K{struct} type\_PasswordLookup\_UserName *) in;}} ! 69: \L{\LB{}} ! 70: \L{\LB{ \K{if} (rox \-\> rox\_nolinked == 0) \{}} ! 71: \L{\LB{}\Tab{8}{advise (LLOG\_NOTICE, NULLCP,}} ! 72: \L{\LB{}\Tab{16}{\S{}\"RO\-INVOKE.INDICATION\/\%d: \%s, unknown linkage \%d\"\SE{},}} ! 73: \L{\LB{}\Tab{16}{sd, ryo \-\> ryo\_name, rox \-\> rox\_linkid);}} ! 74: \L{\LB{}\Tab{8}{\K{return} ureject (sd, ROS\_IP\_LINKED, rox, roi);}} ! 75: \L{\LB{ \}}} ! 76: \L{\LB{ \K{if} (debug)}} ! 77: \L{\LB{}\Tab{8}{advise (LLOG\_DEBUG, NULLCP, \S{}\"RO\-INVOKE.INDICATION\/\%d: \%s\"\SE{},}} ! 78: \L{\LB{}\Tab{16}{sd, ryo \-\> ryo\_name);}} ! 79: \L{\LB{}} ! 80: \L{\LB{ \K{if} ((cp = qb2str (arg)) == NULL)}} ! 81: \L{\LB{}\Tab{8}{result = error (sd, error\_PasswordLookup\_congested, (caddr\_t) NULL,}} ! 82: \L{\LB{}\Tab{24}{rox, roi);}} ! 83: \L{\LB{ \K{else} \{}} ! 84: \L{\LB{}\Tab{8}{result = lookup (sd, getpwnam (cp), rox, roi);}} ! 85: \L{\LB{}\Tab{8}{free (cp);}} ! 86: \L{\LB{ \}}} ! 87: \L{\LB{}} ! 88: \L{\LB{ \K{return} result;}} ! 89: \L{\LB{\}}} ! 90: \L{\LB{}} ! 91: \L{\LB{}} ! 92: \L{\LB{\K{static} \K{int} op\_lookupUID (sd, ryo, rox, in, roi)}} ! 93: \L{\LB{\K{int}}\Tab{8}{sd;}} ! 94: \L{\LB{\K{struct} RyOperation *ryo;}} ! 95: \L{\LB{\K{struct} RoSAPinvoke *rox;}} ! 96: \L{\LB{caddr\_t}\Tab{8}{in;}} ! 97: \L{\LB{\K{struct} RoSAPindication *roi;}} ! 98: \L{\LB{\{}} ! 99: \L{\LB{ \K{register} \K{struct} type\_PasswordLookup\_UserID *arg =}} ! 100: \L{\LB{}\Tab{16}{(\K{struct} type\_PasswordLookup\_UserID *) in;}} ! 101: \L{\LB{}} ! 102: \L{\LB{ \K{if} (rox \-\> rox\_nolinked == 0) \{}} ! 103: \L{\LB{}\Tab{8}{advise (LLOG\_EXCEPTIONS, NULLCP,}} ! 104: \L{\LB{}\Tab{16}{\S{}\"RO\-INVOKE.INDICATION\/\%d: \%s, unknown linkage \%d\"\SE{},}} ! 105: \L{\LB{}\Tab{16}{sd, ryo \-\> ryo\_name, rox \-\> rox\_linkid);}} ! 106: \L{\LB{}\Tab{8}{\K{return} ureject (sd, ROS\_IP\_LINKED, rox, roi);}} ! 107: \L{\LB{ \}}} ! 108: \L{\LB{ \K{if} (debug)}} ! 109: \L{\LB{}\Tab{8}{advise (LLOG\_DEBUG, NULLCP, \S{}\"RO\-INVOKE.INDICATION\/\%d: \%s\"\SE{},}} ! 110: \L{\LB{}\Tab{16}{sd, ryo \-\> ryo\_name);}} ! 111: \L{\LB{}} ! 112: \L{\LB{ \K{return} lookup (sd, getpwuid (arg \-\> arg), rox, roi);}} ! 113: \L{\LB{\}}} ! 114: \L{\LB{}} ! 115: \L{\LB{}} ! 116: \L{\LB{\K{static} \K{int} lookup (sd, pw, rox, roi)}} ! 117: \L{\LB{\K{int}}\Tab{8}{sd;}} ! 118: \L{\LB{\K{struct} passwd *pw;}} ! 119: \L{\LB{\K{struct} RoSAPinvoke *rox;}} ! 120: \L{\LB{\K{struct} RoSAPindication *roi;}} ! 121: \L{\LB{\{}} ! 122: \L{\LB{ \K{int}}\Tab{8}{ result;}} ! 123: \L{\LB{}} ! 124: \L{\LB{ \K{if} (pw) \{}} ! 125: \L{\LB{}\Tab{8}{\K{register} \K{struct} type\_PasswordLookup\_Passwd *res = NULL;}} ! 126: \L{\LB{}} ! 127: \L{\LB{}\Tab{8}{\K{if} (xalloc (res, \K{struct} type\_PasswordLookup\_Passwd *) == NULL}} ! 128: \L{\LB{}\Tab{16}{\|\| (res \-\> name = salloc (pw \-\> pw\_name)) == NULL}} ! 129: \L{\LB{}\Tab{16}{\|\| (*pw \-\> pw\_passwd}} ! 130: \L{\LB{}\Tab{24}{\&\& (res \-\> passwd = salloc (pw \-\> pw\_passwd)) == NULL)}} ! 131: \L{\LB{}\Tab{16}{\|\| xalloc (res \-\> uid, \K{struct} type\_PasswordLookup\_UserID *)}} ! 132: \L{\LB{}\Tab{24}{== NULL}} ! 133: \L{\LB{}\Tab{16}{\|\| xalloc (res \-\> gid, \K{struct} type\_PasswordLookup\_GroupID *)}} ! 134: \L{\LB{}\Tab{24}{== NULL}} ! 135: \L{\LB{}\Tab{16}{\|\| (pw \-\> pw\_comment}} ! 136: \L{\LB{}\Tab{24}{\&\& (res \-\> comment = salloc (pw \-\> pw\_comment))}} ! 137: \L{\LB{}\Tab{32}{== NULL)}} ! 138: \L{\LB{}\Tab{16}{\|\| (pw \-\> pw\_gecos}} ! 139: \L{\LB{}\Tab{24}{\&\& (res \-\> gecos = salloc (pw \-\> pw\_gecos)) == NULL)}} ! 140: \L{\LB{}\Tab{16}{\|\| (pw \-\> pw\_dir}} ! 141: \L{\LB{}\Tab{24}{\&\& (res \-\> dir = salloc (pw \-\> pw\_dir)) == NULL)}} ! 142: \L{\LB{}\Tab{16}{\|\| (pw \-\> pw\_shell}} ! 143: \L{\LB{}\Tab{24}{\&\& (res \-\> shell = salloc (pw \-\> pw\_shell))}} ! 144: \L{\LB{}\Tab{32}{ == NULL))}} ! 145: \L{\LB{}\Tab{8}{ result = error (sd, error\_PasswordLookup\_congested, (caddr\_t) NULL,}} ! 146: \L{\LB{}\Tab{16}{rox, roi);}} ! 147: \L{\LB{}\Tab{8}{\K{else} \{}} ! 148: \L{\LB{}\Tab{8}{ res \-\> uid \-\> arg = pw \-\> pw\_uid;}} ! 149: \L{\LB{}\Tab{8}{ res \-\> gid \-\> arg = pw \-\> pw\_gid;}} ! 150: \L{\LB{}\Tab{8}{ res \-\> quota = pw \-\> pw\_quota;}} ! 151: \L{\LB{}} ! 152: \L{\LB{}\Tab{8}{ \K{if} (RyDsResult (sd, rox \-\> rox\_id, (caddr\_t) res, ROS\_NOPRIO, roi)}} ! 153: \L{\LB{}\Tab{16}{ == NOTOK)}} ! 154: \L{\LB{}\Tab{16}{ros\_adios (\&roi \-\> roi\_preject, \S{}\"RESULT\"\SE{});}} ! 155: \L{\LB{}\Tab{8}{ result = OK;}} ! 156: \L{\LB{}\Tab{8}{\}}} ! 157: \L{\LB{}} ! 158: \L{\LB{}\Tab{8}{free\_PasswordLookup\_Passwd (res);}} ! 159: \L{\LB{ \}}} ! 160: \L{\LB{ \K{else}}} ! 161: \L{\LB{}\Tab{8}{result = error (sd, error\_PasswordLookup\_noSuchUser, (caddr\_t) NULL,}} ! 162: \L{\LB{}\Tab{16}{rox, roi);}} ! 163: \L{\LB{}} ! 164: \L{\LB{ \K{return} result;}} ! 165: \L{\LB{\}}} ! 166: \L{\LB{}} ! 167: \L{\LB{}} ! 168: \L{\LB{\C{}\/* ERROR *\/\CE{}}} ! 169: \L{\LB{}} ! 170: \L{\LB{\K{static} \K{int} error (sd, err, param, rox, roi)}} ! 171: \L{\LB{\K{int}}\Tab{8}{sd,}} ! 172: \L{\LB{}\Tab{8}{err;}} ! 173: \L{\LB{caddr\_t}\Tab{8}{param;}} ! 174: \L{\LB{\K{struct} RoSAPinvoke *rox;}} ! 175: \L{\LB{\K{struct} RoSAPindication *roi;}} ! 176: \L{\LB{\{}} ! 177: \L{\LB{ \K{if} (RyDsError (sd, rox \-\> rox\_id, err, param, ROS\_NOPRIO, roi) == NOTOK)}} ! 178: \L{\LB{}\Tab{8}{ros\_adios (\&roi \-\> roi\_preject, \S{}\"ERROR\"\SE{});}} ! 179: \L{\LB{}} ! 180: \L{\LB{ \K{return} OK;}} ! 181: \L{\LB{\}}} ! 182: \L{\LB{}} ! 183: \L{\LB{}} ! 184: \L{\LB{\C{}\/* U\-REJECT *\/\CE{}}} ! 185: \L{\LB{}} ! 186: \L{\LB{\K{static} \K{int} ureject (sd, reason, rox, roi)}} ! 187: \L{\LB{\K{int}}\Tab{8}{sd,}} ! 188: \L{\LB{}\Tab{8}{reason;}} ! 189: \L{\LB{\K{struct} RoSAPinvoke *rox;}} ! 190: \L{\LB{\K{struct} RoSAPindication *roi;}} ! 191: \L{\LB{\{}} ! 192: \L{\LB{ \K{if} (RyDsUReject (sd, rox \-\> rox\_id, reason, ROS\_NOPRIO, roi) == NOTOK)}} ! 193: \L{\LB{}\Tab{8}{ros\_adios (\&roi \-\> roi\_preject, \S{}\"U\-REJECT\"\SE{});}} ! 194: \L{\LB{}} ! 195: \L{\LB{ \K{return} OK;}} ! 196: \L{\LB{\}}}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.