/*
- * $Source$
- * $Author$
- * $Header$
+ * $Source$
+ * $Author$
+ * $Header$
*
- * Copyright (C) 1987 by the Massachusetts Institute of Technology
+ * Copyright (C) 1987 by the Massachusetts Institute of Technology
*
- * Server for user registration with SMS and Kerberos.
+ * Server for user registration with SMS and Kerberos.
*
- * This program is a client of the SMS server and the Kerberos
- * admin_server, and is a server for the userreg program.
+ * This program is a client of the SMS server and the Kerberos
+ * admin_server, and is a server for the userreg program.
*
- * $Log$
- * Revision 1.8 1988-07-20 15:39:25 mar
- * find realm at runtime; don't use hard-coded one
+ * $Log$
+ * Revision 1.9 1988-07-26 14:50:40 qjb
+ * Added comments and did some cleaning up in preparation for rewrite.
+ * This version will not run; the last version that will is 1.8.
*
+ * Revision 1.8 88/07/20 15:39:25 mar
+ * find realm at runtime; don't use hard-coded one
+ *
* Revision 1.7 88/02/08 15:08:15 mar
* Moved header file locations
*
#include "admin_err.h"
#include <strings.h>
+#define WHOAMI "reg_svr" /* Name of program for SMS logging */
+#define CUR_SMS_VERSION SMS_VERSION_2 /* SMS version for this program */
+
+
extern int abort();
extern char *strdup();
extern char *malloc();
extern int krb_err_base;
extern char admin_errmsg[];
-long now;
-
-struct msg {
- u_long version;
- u_long request;
- char *first;
- char *last;
- char *sealed;
- int sealed_len;
+extern int errno; /* Unix error number */
+
+/* This is the structure used to store the packet information */
+/* Get this. The register client gets the MIT id of the registering user
+ in plain text, encrypts it with one-way password encryption,
+ concatenates that to the plain text id, and then des encrypts the
+ whole thing using the password encrypted id as the key! The result
+ goes in enc_mitid. */
+struct msg
+{
+ u_long version; /* SMS version */
+ u_long request; /* Request */
+ char *first; /* First name */
+ char *last; /* Last name */
+ char *enc_mitid; /* See comment above */
+ int enc_mitid_len; /* Length of enc_mitid */
};
-static char retval[BUFSIZ];
+static char errmsg[BUFSIZ];
main()
{
- struct sockaddr_in sin;
- struct servent *sp;
- int s;
- int status;
- int addrlen, len;
- char buf[BUFSIZ];
- extern int errno;
- u_long seqno;
- struct msg message;
- extern char *whoami;
- int i;
-
+ struct servent *sp; /* Service info from /etc/services */
+ int s; /* Socket descriptor */
+ struct sockaddr_in sin; /* Internet style socket address */
+ int addrlen; /* Size of socket address (sin) */
+ char packet[BUFSIZ]; /* Buffer for packet transmission */
+ int pktlen; /* Size of packet */
+ u_long seqno; /* Sequence number for packet transmission */
+ struct msg message; /* Storage for parsed packet */
+ int status; /* General purpose error status */
+
+ /* Error messages sent one line at a time */
setlinebuf(stderr);
- whoami = "reg_svr";
+ /* Initialize user registration error table */
init_ureg_err_tbl();
-
- sp = getservbyname("sms_ureg", "udp");
- if (sp == NULL) {
+
+ /* Get service information from /etc/services */
+ if ((sp = getservbyname("sms_ureg", "udp")) == NULL)
+ {
fprintf(stderr, "Unknown service sms_ureg/udp\n");
exit(1);
}
- s = socket(AF_INET, SOCK_DGRAM, 0);
- if (s < 0) {
+
+ /* Get an internet style datagram socket */
+ if ((s = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP)) < 0)
+ {
perror("socket");
exit(1);
}
bzero((char *)&sin, sizeof(sin));
-
+
sin.sin_family = AF_INET;
sin.sin_port = sp->s_port;
sin.sin_addr.s_addr = INADDR_ANY;
-
- if (bind(s, &sin, sizeof(sin)) < 0) {
+
+ /* Bind a name to the socket */
+ if (bind(s, &sin, sizeof(sin)) < 0)
+ {
perror("bind");
exit(1);
}
-
- status = sms_connect();
- if (status != 0) {
- com_err("reg_svr", status, " on connect");
+
+ /* Connect to the SMS server */
+ if ((status = sms_connect()) != SMS_SUCCESS)
+ {
+ com_err(WHOAMI, status, " on connect");
exit(1);
}
- status = sms_auth();
- if (status != 0) {
- com_err("reg_svr", status, " on auth");
+
+ /* Authorize, telling the server who you are */
+ if ((status = sms_auth(WHOAMI)) != SMS_SUCCESS)
+ {
+ com_err(WHOAMI, status, " on auth");
exit(1);
}
- for (;;) {
- com_err("reg_svr", 0, "Ready for next request");
+ /* Sit around waiting for requests from the client. */
+ for (;;)
+ {
+ com_err(WHOAMI, 0, "Ready for next request");
addrlen = sizeof(sin);
- bzero(retval, BUFSIZ);
- len = recvfrom(s, buf, BUFSIZ, 0, &sin, &addrlen);
- if (len < 0) {
+ bzero(errmsg, BUFSIZ);
+ /* Receive a packet into buf. */
+ if ((pktlen = recvfrom(s,packet,sizeof(packet),0,&sin,&addrlen)) < 0)
+ {
perror("recvfrom");
if (errno == EINTR) continue;
-
exit(1);
}
+
/* Parse a request packet */
- status = parse_pkt(buf, len, &seqno, &message);
- if (status != 0) {
- len = BUFSIZ;
- format_pkt(buf, &len, seqno, status, (char *)NULL);
- (void) sendto(s, buf, len, 0, &sin, addrlen);
+ if ((status = parse_pkt(packet, pktlen, &seqno, &message)) != 0)
+ {
+ pktlen = sizeof(packet);
+ /* Format packet to send back to the client */
+ format_pkt(packet, &pktlen, seqno, status, (char *)NULL);
+ /* Report the error the the client */
+ (void) sendto(s, packet, pktlen, 0, &sin, addrlen);
continue;
}
+
/* do action */
- switch((int)message.request) {
- case UREG_VERIFY_USER:
+ switch((int)message.request)
+ {
+ case UREG_VERIFY_USER:
status = verify_user(&message);
break;
- case UREG_RESERVE_LOGIN:
+ case UREG_RESERVE_LOGIN:
status = reserve_user(&message);
break;
- case UREG_SET_PASSWORD:
+ case UREG_SET_PASSWORD:
status = set_password(&message);
break;
- default:
+ default:
status = UREG_UNKNOWN_REQUEST;
break;
}
- len = BUFSIZ;
- format_pkt(buf, &len, seqno, status, retval);
- sendto(s, buf, len, 0, &sin, addrlen);
+ /* Report what happened to client */
+ pktlen = sizeof(packet);
+ format_pkt(packet, &pktlen, seqno, status, errmsg);
+ sendto(s, packet, pktlen, 0, &sin, addrlen);
}
}
int user_id;
#define min(a,b) ((a)>(b)?(b):(a))
-
+
int validate_idno(message, db_mit_id, first, last)
- struct msg *message;
- char *db_mit_id;
- char *first, *last;
+ struct msg *message; /* Formatted packet */
+ char *db_mit_id; /* Encrypted MIT ID from SMS database */
+ char *first, *last; /* First and last name for MIT ID encryption */
+/* This routine makes sure that the ID from the database matches
+ the ID sent accross in the packet. The information in the packet
+ was created in the following way:
+
+ The plain text ID number was encrypted via crypt() resulting in
+ the form that would appear in the SMS database. This is
+ concatinated to the plain text ID so that the ID string contains
+ plain text ID followed by a null followed by the encrypted ID.
+ The whole thing is then DES encrypted using the encrypted ID as
+ the source of the key.
+
+ This routine tries each encrypted ID in the database that belongs
+ to someone with this user's first and last name and tries to
+ decrypt the packet with this information. */
{
- C_Block key;
- Key_schedule sched;
- static char decrypt[BUFSIZ];
- char recrypt[14];
- static char hashid[14];
- char idnumber[BUFSIZ];
- char *temp;
- int len;
-
- int i;
+ C_Block key; /* The key for DES en/decryption */
+ Key_schedule sched; /* En/decryption schedule */
+ static char decrypt[BUFSIZ]; /* Buffer to hold decrypted information */
+ long decrypt_len; /* Length of decypted ID information */
+ char recrypt[14]; /* Buffer to hold re-encrypted information */
+ static char hashid[14]; /* Buffer to hold one-way encrypted ID */
+ char idnumber[BUFSIZ]; /* Buffer to hold plain-text ID */
+ char *temp; /* A temporary storage buffer */
+ int len; /* */
+
mit_id = 0;
+ /* Make the decrypted information length the same as the encrypted
+ information length. Both are integral multples of eight bytes
+ because of the DES encryption routines. */
+ decrypt_len = (long)message->enc_mitid_len;
+ /* Get key from the one-way encrypted ID in the SMS database */
string_to_key(db_mit_id, key);
+ /* Get schedule from key */
key_sched(key, sched);
- pcbc_encrypt(message->sealed, decrypt, message->sealed_len, sched, key, 0);
-
- (void) strncpy(idnumber, decrypt, message->sealed_len);
+ /* Decrypt information from packet using this key. Since decrypt_len
+ is an integral multiple of eight bytes, it will probably be null-
+ padded. */
+ pcbc_encrypt(message->enc_mitid, decrypt, \
+ decrypt_len, sched, key, DECRYPT);
+
+ /* Extract the plain text and encrypted ID fields from the decrypted
+ packet information. */
+ /* Since the decrypted information starts with the plain-text ID
+ followed by a null, if the decryption worked, this will only
+ copy the plain text part of the decrypted information. It is
+ important that strncpy be used because if we are not using the
+ correct key, there is no guarantee that a null will occur
+ anywhere in the string. */
+ (void) strncpy(idnumber, decrypt, decrypt_len);
+ /* Point temp to the end of the plain text ID number. */
temp = decrypt + strlen(idnumber) + 1;
- len = message->sealed_len - (temp - decrypt);
-
+ /* Find out how much more room there is. */
+ len = message->enc_mitid_len - (temp - decrypt);
+ /* Copy the next 14 bytes of the decrypted information into
+ hashid if there are 14 more bytes to copy. There will be
+ if we have the right key. */
(void) strncpy(hashid, temp, min(len, 14));
+ /* Point temp to the end of the encrypted ID field */
temp += strlen(hashid) + 1;
- len = message->sealed_len - (temp - decrypt);
-
+ /* Find out how much more room there is. */
+ len = message->enc_mitid_len - (temp - decrypt);
+
+ /* Now compare encrypted ID's returning with an error if they
+ don't match. */
if (strcmp(hashid, db_mit_id)) return 1;
encrypt_mitid(recrypt, idnumber, first, last);
+ /* Now compare encrypted plain text to ID from database. */
if (strcmp(recrypt, db_mit_id)) return 1;
-
+
+ /* We made it. */
reg_misc = temp;
reg_misc_len = len;
mit_id = hashid;
static int status_in_db;
vfy_callbk(argc, argv, p_message)
- int argc; /* Should sanity check this.. */
- char **argv;
- char *p_message;
+ int argc; /* Should sanity check this.. */
+ char **argv;
+ char *p_message;
{
struct msg *message = (struct msg *)p_message;
char *db_mit_id;
db_mit_id = argv[8];
firstname = argv[5];
lastname = argv[4];
-
+
status = validate_idno(message, db_mit_id, firstname, lastname);
if (status) return 0; /* Nope; decryption failed */
-
+
status_in_db = atoi(argv[7]);
reg_status = status_in_db;
-
- if (status_in_db != 0) {
- (void) strcpy(retval, argv[0]);
+
+ if (status_in_db != 0)
+ {
+ (void) strcpy(errmsg, argv[0]);
}
user_id = atoi(argv[1]);
got_one = 1;
extern char *crypt();
#define _tolower(c) ((c)|0x60)
-
+
salt[0] = _tolower(last[0]);
salt[1] = _tolower(first[0]);
salt[2] = 0;
}
int verify_user(message)
- struct msg *message;
-
+ struct msg *message;
{
char *argv[3];
int status;
- com_err("reg_svr", 0, " verify_user %s %s\n",
+ com_err(WHOAMI, 0, " verify_user %s %s\n",
message->first, message->last);
argv[0] = "get_user_by_first_and_last";
argv[1] = message->first;
if (!got_one && !status)
status = UREG_USER_NOT_FOUND;
- if (status != 0) goto punt;
-
+ if (status != SMS_SUCCESS) goto punt;
+
if (reg_status == 1) status = UREG_ALREADY_REGISTERED;
if (reg_status == 2) status = UREG_NO_PASSWD_YET;
-punt:
+ punt:
return status;
}
reserve_user(message)
- struct msg *message;
+ struct msg *message;
{
char *argv[3];
int status;
char uid_buf[20];
char realm[REALM_SZ];
- com_err("reg_svr", 0, " reserve_user %s %s\n",
+ com_err(WHOAMI, 0, " reserve_user %s %s\n",
message->first, message->last);
-
+
argv[0] = "gufl"; /* get_user_by_first_and_last */
argv[1] = message->first;
argv[2] = message->last;
got_one = 0;
status = sms_query_internal(3, argv, vfy_callbk, (char *)message);
-
+
if (status == SMS_NO_MATCH) status = UREG_USER_NOT_FOUND;
if (!got_one && !status)
status = UREG_USER_NOT_FOUND;
-
- if (status != 0) goto punt;
- if (reg_status != 0) {
+
+ if (status != SMS_SUCCESS) goto punt;
+ if (reg_status != 0)
+ {
status = UREG_ALREADY_REGISTERED;
goto punt;
}
/*
* He's made it past this phase already.
*/
- if (status_in_db == 2) {
+ if (status_in_db == 2)
+ {
status = 0;
goto punt;
}
-
- for (i = 0; i < reg_misc_len && reg_misc[i]; i++) {
+
+ for (i = 0; i < reg_misc_len && reg_misc[i]; i++)
+ {
if (!islower(reg_misc[i]) && !isdigit(reg_misc[i]) &&
- reg_misc[i] != '_' && reg_misc[i] != '.') {
+ reg_misc[i] != '_' && reg_misc[i] != '.')
+ {
status = UREG_INVALID_UNAME;
goto punt;
}
}
- if (i < 3 || i > 8) {
+ if (i < 3 || i > 8)
+ {
status = UREG_INVALID_UNAME;
goto punt;
}
/* Send request to kerberos admin_server for login name */
/* get keys */
- if ((status = get_krbrlm(realm, 1)) != KSUCCESS) {
+ if ((status = get_krbrlm(realm, 1)) != KSUCCESS)
+ {
status += krb_err_base;
goto punt;
}
status = get_svc_in_tkt("register", "sms", realm,
"changepw", "kerberos",
1, "/etc/srvtab");
- if (status) {
- status += krb_err_base;
- goto punt;
+ if (status)
+ {
+ status += krb_err_base;
+ goto punt;
}
/* send set password request to kerberos admin_server */
(void) sprintf(uid_buf, "%013d", user_id); /* 13 chars of placebo */
- /* for backwards-compat. */
+ /* for backwards-compat. */
status = admin_call(ADMIN_ADD_NEW_KEY_ATTR, login, "",
"", uid_buf);
-
- if (status) {
- if (status == ADMIN_SERVER_ERROR) {
- printf("Server error: %s\n", admin_errmsg);
-
- if (strcmp(admin_errmsg,
- "Principal already in kerberos database.") ==0)
- status = UREG_LOGIN_USED;
- }
- goto punt;
+
+ if (status)
+ {
+ if (status == ADMIN_SERVER_ERROR)
+ {
+ printf("Server error: %s\n", admin_errmsg);
+
+ if (strcmp(admin_errmsg,
+ "Principal already in kerberos database.") ==0)
+ status = UREG_LOGIN_USED;
+ }
+ goto punt;
}
-
+
dest_tkt();
/* If valid: */
/* Set login name */
status = set_login(login, mit_id);
-
- if (status) {
- com_err("set_login", status, 0);
+
+ if (status)
+ {
+ com_err("set_login", status, (char *)0);
goto punt;
}
/* choose post office */
status = choose_pobox(login);
- if (status) {
- com_err("choose_pobox", status, 0);
+ if (status)
+ {
+ com_err("choose_pobox", status, (char *)0);
goto punt;
}
/* create group */
status = create_group(login);
if (status == SMS_LIST) status = UREG_LOGIN_USED;
- if (status) {
- com_err("create_group", status, 0);
+ if (status)
+ {
+ com_err("create_group", status, (char *)0);
goto punt;
}
/* set quota entry, create filsys */
status = alloc_filsys(login, SMS_FS_STUDENT, 0, 0);
if (status == SMS_FILESYS_EXISTS) status = UREG_LOGIN_USED;
- if (status) {
- com_err("alloc_filsys", status, 0);
+ if (status)
+ {
+ com_err("alloc_filsys", status, (char *)0);
goto punt;
}
/* set filsys and status in SMS database */
status = set_status_filsys(reg_misc, mit_id);
- if (status) {
- com_err("set_filsys", status, 0);
+ if (status)
+ {
+ com_err("set_filsys", status, (char *)0);
goto punt;
}
-punt:
+ punt:
dest_tkt();
-
- com_err("reg_svr", status, " returned from reserve_user");
+
+ com_err(WHOAMI, status, " returned from reserve_user");
return status;
}
set_password(message)
- struct msg *message;
+ struct msg *message;
{
char *argv[3];
int status;
char uid_buf[10];
char realm[REALM_SZ];
- com_err("reg_svr", 0, " set_password %s %s\n",
+ com_err(WHOAMI, 0, " set_password %s %s\n",
message->first, message->last);
-
+
/* validate that user is who he claims to be */
-
+
argv[0] = "get_user_by_first_and_last";
argv[1] = message->first;
argv[2] = message->last;
if (!got_one && !status)
status = UREG_USER_NOT_FOUND;
- if (status != 0) goto punt;
-
+ if (status != SMS_SUCCESS) goto punt;
+
/* validate that state is equal to '2' (login, but no password) */
-
- if (reg_status != 2) {
+
+ if (reg_status != 2)
+ {
status = UREG_NO_LOGIN_YET;
goto punt;
}
-
+
/* get keys */
- if ((status = get_krbrlm(realm, 1)) != KSUCCESS) {
+ if ((status = get_krbrlm(realm, 1)) != KSUCCESS)
+ {
goto punt;
}
status = get_svc_in_tkt("register", "sms", realm,
"changepw", "kerberos",
1, "/etc/srvtab");
- if (status) {
- status += krb_err_base;
- goto punt;
+ if (status)
+ {
+ status += krb_err_base;
+ goto punt;
}
-
+
(void) sprintf(uid_buf, "%013d", user_id); /* 13 chars of placebo */
- /* for backwards-compat. */
+ /* for backwards-compat. */
/* send set password request to kerberos admin_server */
- status = admin_call(ADMIN_ADD_NEW_KEY_ATTR, retval, "",
+ /**####**/
+ status = admin_call(ADMIN_ADD_NEW_KEY_ATTR, errmsg, "",
reg_misc, uid_buf);
-
+
if (status) goto punt;
dest_tkt();
+ /**#####**/
+ status = set_final_status(errmsg, mit_id);
- status = set_final_status(retval, mit_id);
-
/* reflect reply to client */
-punt:
+ punt:
dest_tkt();
return status;
}
-parse_pkt(buf, len, seqnop, messagep)
- char *buf;
- int len;
- u_long *seqnop;
- struct msg *messagep;
+parse_pkt(packet, pktlen, seqnop, messagep)
+ char *packet;
+ int pktlen;
+ u_long *seqnop;
+ struct msg *messagep;
+ /* This routine checks a packet and puts the information in it in
+ a structure if it is valid. */
{
- if (len < 4) return UREG_BROKEN_PACKET;
- bcopy(buf, (char *)&messagep->version, sizeof(long));
+ if (pktlen < 4) return UREG_BROKEN_PACKET;
+ /* Extract the SMS version from the packet */
+ bcopy(packet, (char *)&messagep->version, sizeof(long));
+ /* Convert byte order from network to host */
messagep->version = ntohl(messagep->version);
- if (messagep->version != 1) return UREG_WRONG_VERSION;
+ /* Verify version */
+ if (messagep->version != CUR_SMS_VERSION) return UREG_WRONG_VERSION;
- buf += 4;
- len -= 4;
-
- if (len < 4) return UREG_BROKEN_PACKET;
- bcopy(buf, (char *)seqnop, sizeof(long));
-
- buf += 4;
- len -= 4;
+ packet += 4;
+ pktlen -= 4;
- if (len < 4) return UREG_BROKEN_PACKET;
- bcopy(buf, (char *)(&messagep->request), sizeof(long));
+ if (pktlen < 4) return UREG_BROKEN_PACKET;
+ /* Extract the sequence number from the packet */
+ bcopy(packet, (char *)seqnop, sizeof(long));
+
+ packet += 4;
+ pktlen -= 4;
+
+ if (pktlen < 4) return UREG_BROKEN_PACKET;
+ /* Extract the request from the packet */
+ bcopy(packet, (char *)(&messagep->request), sizeof(long));
messagep->request = ntohl(messagep->request);
- buf += 4;
- len -= 4;
+ packet += 4;
+ pktlen -= 4;
- messagep->first = buf;
-
- for (; *buf && len > 0; --len, ++buf) continue;
- if (len <= 0) return UREG_BROKEN_PACKET;
-
- buf++, len--;
-
- messagep->last = buf;
-
- for (; *buf && len > 0; --len, ++buf) continue;
- if (len <= 0) return UREG_BROKEN_PACKET;
+ /* Extract first name from the packet */
+ messagep->first = packet;
- buf++, len--;
-
- if (len <= 0) return UREG_BROKEN_PACKET;
+ /* Scan forward until null appears in the packet or there
+ is no more packet! */
+ for (; *packet && pktlen > 0; --pktlen, ++packet) continue;
+ if (pktlen <= 0) return UREG_BROKEN_PACKET;
+
+ /* Skip over the null */
+ packet++, pktlen--;
+
+ /* Extract last name from the packet */
+ messagep->last = packet;
+
+ for (; *packet && pktlen > 0; --pktlen, ++packet) continue;
+ if (pktlen <= 0) return UREG_BROKEN_PACKET;
+
+ packet++, pktlen--;
+
+ if (pktlen <= 0) return UREG_BROKEN_PACKET;
- messagep->sealed = buf;
- messagep->sealed_len = len;
+ /* Extract MIT id information from packet; see comment on
+ struct msg. */
+ messagep->enc_mitid = packet;
+ messagep->enc_mitid_len = pktlen;
return 0;
}
-format_pkt(buf, lenp, seqno, status, message)
- char *buf;
- int *lenp;
- u_long seqno;
- int status;
- char *message;
+format_pkt(packet, pktlenp, seqno, status, message)
+ char *packet;
+ int *pktlenp;
+ u_long seqno;
+ int status;
+ char *message;
+ /* This routine prepares a packet to send back to the client. */
{
- u_long vers = htonl((u_long)1);
+ u_long vers = htonl((u_long)CUR_SMS_VERSION);
status = htonl((u_long)status);
- bcopy((char *)&vers, buf, sizeof(long));
- bcopy((char *)&seqno, buf+sizeof(long), sizeof(long));
- bcopy((char *)&status, buf+ 2*sizeof(long), sizeof(long));
- *lenp = sizeof(long) * 3;
- (void) strcpy(buf+3*sizeof(long), message);
- (*lenp) += strlen(message);
+ /* Put current SMS version into the packet */
+ bcopy((char *)&vers, packet, sizeof(long));
+ /* Put sequence number into the packet */
+ bcopy((char *)&seqno, packet+sizeof(long), sizeof(long));
+ /* Put error status into the packet */
+ bcopy((char *)&status, packet+ 2*sizeof(long), sizeof(long));
+ *pktlenp = sizeof(long) * 3;
+ /* Copy the message into the packet */
+ (void) strcpy(packet+3*sizeof(long), message);
+ (*pktlenp) += strlen(message);
}
store_user(argc, argv, argp)
- int argc;
- char **argv;
+ int argc;
+ char **argv;
char *argp;
{
char **retv = (char **) argp;
int i;
- for (i = 0; i < argc; i++) {
- if (retv[i]) {
+ for (i = 0; i < argc; i++)
+ {
+ if (retv[i])
+ {
free(retv[i]);
retv[i]=0;
}
}
return 0;
}
-
+
/*
* Set login name of user with "idnumber" to be "username"
*/
set_login(username, idnumber)
- char *username;
- char *idnumber;
+ char *username;
+ char *idnumber;
{
char *argv[2];
int status, i;
argv[0] = "get_user_by_mitid";
argv[1] = idnumber;
-
- for (i=0; i<13; i++) {
+
+ for (i=0; i<13; i++)
+ {
retv[i] = 0;
}
-
+
status = sms_query_internal(2, argv, store_user, (char *)(retv+1));
if (status) return status;
-
+
retv[0] = retv[1];
retv[1] = username;
if (retv[4]) free(retv[4]);
retv[1] = 0;
retv[4] = 0;
- for (i=1; i<12; i++) {
+ for (i=1; i<12; i++)
+ {
if (retv[i]) free(retv[i]);
retv[i] = 0;
}
*/
set_status_filsys(username, idnumber)
- char *username;
- char *idnumber;
+ char *username;
+ char *idnumber;
{
char *argv[2];
int status, i;
argv[0] = "get_user_by_mitid";
argv[1] = idnumber;
-
- for (i=0; i<13; i++) {
+
+ for (i=0; i<13; i++)
+ {
retv[i] = 0;
}
-
+
status = sms_query_internal(2, argv, store_user, (char *)(retv+1));
if (status) return status;
-
+
retv[0] = retv[1];
-
+
free(retv[4]);
retv[4] = username;
-
+
free(retv[8]);
retv[8] = "2";
status = sms_query("update_user", 12, retv, abort, 0);
retv[4] = 0;
retv[8] = 0;
- for (i=1; i<12; i++) {
+ for (i=1; i<12; i++)
+ {
if (retv[i]) free(retv[i]);
retv[i] = 0;
}
*/
set_final_status(username, idnumber)
- char *username;
- char *idnumber;
+ char *username;
+ char *idnumber;
{
char *argv[2];
int status, i;
argv[0] = "get_user_by_mitid";
argv[1] = idnumber;
-
- for (i=0; i<13; i++) {
+
+ for (i=0; i<13; i++)
+ {
retv[i] = 0;
}
-
+
status = sms_query_internal(2, argv, store_user, (char *)(retv+1));
if (status) return status;
-
+
retv[0] = retv[1];
-
+
free(retv[8]);
retv[8] = "1";
status = sms_query("update_user", 12, retv, abort, 0);
retv[8] = 0;
- for (i=1; i<12; i++) {
+ for (i=1; i<12; i++)
+ {
if (retv[i]) free(retv[i]);
retv[i] = 0;
}
}
create_group(login)
- char *login;
+ char *login;
{
int status;
- static char *cr[] = {
+ static char *cr[] =
+ {
"add_user_group",
0,
};
return sms_query_internal(2, cr, abort, 0);
}
+
/*
* Local Variables:
* mode: c
- * c-indent-level: 4
- * c-continued-statement-offset: 4
+ * c-argdecl-indent: 2
* c-brace-offset: -4
- * c-argdecl-indent: 4
- * c-label-offset: -4
+ * c-continued-statement-offset: 2
+ * c-indent-level: 4
+ * c-label-offset: -2
* End:
*/
-