#include <stdio.h>
#include <strings.h>
#include <sms.h>
+#include <sms_app.h>
#include <menu.h>
+#include <ctype.h>
#include "mit-copyright.h"
#include "defs.h"
#include "f_defs.h"
#include "globals.h"
-#include "infodefs.h"
#define LOGIN 0
#define UID 1
* Returns: pointer to statically allocated string.
*/
-static char *states[] = { "Not registered",
+static char *states[] = { "Registerable",
"Active",
- "Half registered",
- "Marked for deletion",
- "Not registerable" };
+ "Half Registered",
+ "Deleted",
+ "Not registerable",
+ "Enrolled/Registerable",
+ "Enrolled/Not Registerable" };
static char *UserState(state)
int state;
{
- if (state < 0 || state > 4)
+ if (state < 0 || state >= US_END)
return("Unknown");
return(states[state]);
}
char name[BUFSIZ], buf[BUFSIZ];
sprintf(name, "%s, %s %s", info[U_LAST], info[U_FIRST], info[U_MIDDLE]);
- sprintf(buf, "Login name: %-10s Full name: %s", info[U_NAME], name);
+ sprintf(buf, "Login name: %-20s Full name: %s", info[U_NAME], name);
Put_message(buf);
- sprintf(buf, "User id: %-13s Login shell %-15s Class: %s",
+ sprintf(buf, "User id: %-23s Login shell %-10s Class: %s",
info[U_UID], info[U_SHELL], info[U_CLASS]);
Put_message(buf);
- sprintf(buf, "Account is: %-10s Encrypted MIT ID number: %s",
+ sprintf(buf, "Account is: %-20s Encrypted MIT ID number: %s",
UserState(atoi(info[U_STATE])), info[U_MITID]);
Put_message(buf);
sprintf(buf, MOD_FORMAT, info[U_MODBY], info[U_MODTIME],info[U_MODWITH]);
if (name) {
sprintf(temp_buf,"\nChanging Attributes of user %s.\n",info[U_NAME]);
Put_message(temp_buf);
+ } else {
+ struct qelem *elem = NULL;
+ char *argv[3];
+
+ GetValueFromUser("User's last name", &info[U_LAST]);
+ GetValueFromUser("User's first name", &info[U_FIRST]);
+ GetValueFromUser("User's middle name", &info[U_MIDDLE]);
+ argv[0] = info[U_FIRST];
+ argv[1] = info[U_LAST];
+ if (do_sms_query("get_user_by_name", 2, argv,
+ StoreInfo, (char *) &elem) == 0) {
+ Put_message("A user by that name already exists in the database.");
+ Loop(QueueTop(elem), PrintUserInfo);
+ Loop(QueueTop(elem), FreeInfo);
+ FreeQueue(elem);
+ if (YesNoQuestion("Add new user anyway", TRUE) == FALSE)
+ return(NULL);
+ }
}
if (name) {
newname = Strsave(info[U_NAME]);
GetValueFromUser("User's UID", &info[U_UID]);
GetValueFromUser("User's shell", &info[U_SHELL]);
- GetValueFromUser("User's last name", &info[U_LAST]);
- GetValueFromUser("User's first name", &info[U_FIRST]);
- GetValueFromUser("User's middle name", &info[U_MIDDLE]);
- GetValueFromUser("User's status", &info[U_STATE]);
+ if (name) {
+ GetValueFromUser("User's last name", &info[U_LAST]);
+ GetValueFromUser("User's first name", &info[U_FIRST]);
+ GetValueFromUser("User's middle name", &info[U_MIDDLE]);
+ }
+ while (1) {
+ int i;
+ GetValueFromUser("User's status (? for help)", &info[U_STATE]);
+ if (isdigit(info[U_STATE][0]))
+ break;
+ Put_message("Valid status numbers:");
+ for (i = 0; i < US_END; i++) {
+ sprintf(temp_buf, " %d: %s", i, states[i]);
+ Put_message(temp_buf);
+ }
+ }
temp_ptr = Strsave(info[U_MITID]);
Put_message("User's MIT ID number (type a new unencrypted number, or keep same encryption)");
GetValueFromUser("", &temp_ptr);
switch(type) {
case LOGIN:
args[0] = name1;
- if ( (status = sms_query("get_user_by_login", 1, args,
- StoreInfo, (char *) &elem)) != 0) {
+ if ( (status = do_sms_query("get_user_by_login", 1, args,
+ StoreInfo, (char *) &elem)) != 0) {
com_err(program_name, status,
" when attempting to get_user_by_login.");
return (NULL);
break;
case UID:
args[0] = name1;
- if ( (status = sms_query("get_user_by_uid", 1, args,
- StoreInfo, (char *) &elem)) != 0) {
+ if ( (status = do_sms_query("get_user_by_uid", 1, args,
+ StoreInfo, (char *) &elem)) != 0) {
com_err(program_name, status,
" when attempting to get_user_by_uid.");
return (NULL);
case BY_NAME:
args[0] = name1;
args[1] = name2;
- if ( (status = sms_query("get_user_by_name", 2, args,
- StoreInfo, (char *) &elem)) != 0) {
+ if ( (status = do_sms_query("get_user_by_name", 2, args,
+ StoreInfo, (char *) &elem)) != 0) {
com_err(program_name, status,
" when attempting to get_user_by_name.");
return (NULL);
break;
case CLASS:
args[0] = name1;
- if ( (status = sms_query("get_user_by_class", 1, args,
- StoreInfo, (char *) &elem)) != 0) {
+ if ( (status = do_sms_query("get_user_by_class", 1, args,
+ StoreInfo, (char *) &elem)) != 0) {
com_err(program_name, status,
" when attempting to get_user_by_class.");
return (NULL);
char ** args, *info[MAX_ARGS_SIZE];
args = AskUserInfo(SetUserDefaults(info), FALSE);
- if ( (status = sms_query("add_user", CountArgs(args),
- args, Scream, (char *) NULL)) != SMS_SUCCESS)
+ if (args == NULL)
+ return(DM_NORMAL);
+ if ( (status = do_sms_query("add_user", CountArgs(args),
+ args, Scream, (char *) NULL)) != SMS_SUCCESS)
com_err(program_name, status, " in add_user");
else
Put_message("New user added to database.");
args[0] = first;
args[1] = last;
- switch (status = sms_query("get_user_by_name", 2, args,
- StoreInfo, (char *) &top)) {
+ switch (status = do_sms_query("get_user_by_name", 2, args,
+ StoreInfo, (char *) &top)) {
case SMS_SUCCESS:
break;
case SMS_NO_MATCH:
args[2] = fstype;
args[3] = NULL;
- switch (status = sms_query("register_user", CountArgs(args),
- args, Scream, (char *) NULL)) {
+ switch (status = do_sms_query("register_user", CountArgs(args),
+ args, Scream, (char *) NULL)) {
case SMS_SUCCESS:
sprintf(temp_buf, "User %s successfully registered.", login);
Put_message(temp_buf);
char error_buf[BUFSIZ];
char ** args = AskUserInfo(info, TRUE);
- if ( (status = sms_query("update_user", CountArgs(args),
- args, Scream, (char *) NULL)) != SMS_SUCCESS) {
+ if ( (status = do_sms_query("update_user", CountArgs(args),
+ args, Scream, (char *) NULL)) != SMS_SUCCESS) {
com_err(program_name, status, " in ModifyFields");
sprintf(error_buf, "User %s not updated due to errors.", info[NAME]);
Put_message(error_buf);
qargs[0] = info[NAME];
qargs[1] = "3";
- if ((status = sms_query("update_user_status", 2, qargs, Scream,
- (char *) NULL)) != SMS_SUCCESS) {
+ if ((status = do_sms_query("update_user_status", 2, qargs, Scream,
+ (char *) NULL)) != SMS_SUCCESS) {
com_err(program_name, status, " in update_user_status");
sprintf(txt_buf, "User %s not deactivated due to errors.", info[NAME]);
Put_message(txt_buf);
if(!ValidName(argv[1]))
return(DM_NORMAL);
- if ( (status = sms_query("get_user_by_uid", 1, argv+1, StoreInfo,
- (char * ) &elem)) != SMS_SUCCESS)
+ if ( (status = do_sms_query("get_user_by_uid", 1, argv+1, StoreInfo,
+ (char * ) &elem)) != SMS_SUCCESS)
com_err(program_name, status, " in get_user_by_uid");
info = (char **) elem->q_data;
return (DM_NORMAL);
}
-/*
- * Local Variables:
- * mode: c
- * c-indent-level: 4
- * c-continued-statement-offset: 4
- * c-brace-offset: -4
- * c-argdecl-indent: 4
- * c-label-offset: -4
- * End:
+
+/* Function Name: GetKrbmap
+ * Description: Shows user <-> Kerberos mappings
+ * Arguments: argc, argv - argv[1] contains the user login name,
+ * argv[2] contains the principal
+ * Returns: none.
*/
+
+/* ARGSUSED */
+int
+GetKrbmap(argc, argv)
+int argc;
+char **argv;
+{
+ int stat;
+ struct qelem *elem = NULL;
+ char buf[BUFSIZ];
+
+ if ((stat = do_sms_query("get_kerberos_user_map", 2, &argv[1],
+ StoreInfo, (char *)&elem)) != 0) {
+ com_err(program_name, stat, " in GetKrbMap.");
+ return(DM_NORMAL);
+ }
+
+ elem = QueueTop(elem);
+ Put_message("");
+ while (elem != NULL) {
+ char **info = (char **) elem->q_data;
+ sprintf(buf, "User: %-9s Principal: %s",
+ info[KMAP_USER], info[KMAP_PRINCIPAL]);
+ Put_message(buf);
+ elem = elem->q_forw;
+ }
+
+ FreeQueue(QueueTop(elem));
+ return(DM_NORMAL);
+}
+
+
+/* Function Name: AddKrbmap
+ * Description: Add a new user <-> Kerberos mapping
+ * Arguments: argc, argv - argv[1] contains the user login name,
+ * argv[2] contains the principal
+ * Returns: none.
+ */
+
+/* ARGSUSED */
+int
+AddKrbmap(argc, argv)
+int argc;
+char **argv;
+{
+ int stat;
+
+ if (!index(argv[KMAP_PRINCIPAL + 1], '@')) {
+ Put_message("Please specify a realm for the kerberos principal.");
+ return(DM_NORMAL);
+ }
+ if ((stat = do_sms_query("add_kerberos_user_map", 2, &argv[1],
+ Scream, NULL)) != 0) {
+ com_err(program_name, stat, " in AddKrbMap.");
+ if (stat == SMS_EXISTS)
+ Put_message("No user or principal may have more than one mapping.");
+ }
+ return(DM_NORMAL);
+}
+
+
+/* Function Name: DeleteKrbmap
+ * Description: Remove a user <-> Kerberos mapping
+ * Arguments: argc, argv - argv[1] contains the user login name,
+ * argv[2] contains the principal
+ * Returns: none.
+ */
+
+/* ARGSUSED */
+int
+DeleteKrbmap(argc, argv)
+int argc;
+char **argv;
+{
+ int stat;
+
+ if ((stat = do_sms_query("delete_kerberos_user_map", 2, &argv[1],
+ Scream, NULL)) != 0) {
+ com_err(program_name, stat, " in DeleteKrbMap.");
+ }
+ return(DM_NORMAL);
+}