#include <string.h>
#include <time.h>
-#include <krb.h>
-
RCSID("$Header$");
void CorrectCapitalization(char **name);
char **AskUserInfo(char **info, Bool name);
struct mqelem *GetUserInfo(int type, char *name1, char *name2);
+static void PrintLogin(char **info);
+struct mqelem *GetUserBySponsor(char *type, char *name);
#define LOGIN 0
#define UID 1
#define ID 4
#ifdef ATHENA
-#define DEFAULT_SHELL "/bin/athena/tcsh"
+#define DEFAULT_SHELL "/bin/athena/bash"
#else
-#define DEFAULT_SHELL "/bin/csh"
+#define DEFAULT_SHELL "/bin/bash"
#endif
#define DEFAULT_CLASS "?"
#define DEFAULT_WINCONSOLESHELL "cmd"
+#define DEFAULT_WINHOMEDIR "[DFS]"
+#define DEFAULT_WINPROFILEDIR "[DFS]"
/* Function Name: UserState
* Description: Convert a numeric state into a descriptive string.
"Not registerable (4)",
"Enrolled/Registerable (5)",
"Enrolled/Not Registerable (6)",
- "Half Enrolled (7)"
+ "Half Enrolled (7)",
+ "Registerable, Kerberos only (8)",
+ "Active, Kerberos only (9)"
};
static char *UserState(int state)
static void PrintUserInfo(char **info)
{
- char name[BUFSIZ], buf[BUFSIZ];
+ char name[BUFSIZ], buf[BUFSIZ], sponsor[BUFSIZ];
int status;
sprintf(name, "%s, %s %s", info[U_LAST], info[U_FIRST], info[U_MIDDLE]);
sprintf(buf, "Class: %-25s Windows Console Shell: %-10s",
info[U_CLASS], info[U_WINCONSOLESHELL]);
Put_message(buf);
+ sprintf(sponsor, "%s %s", info[U_SPONSOR_TYPE], info[U_SPONSOR_NAME]);
+ sprintf(buf, "Sponsor: %-23s Expiration date: %s", sponsor, info[U_EXPIRATION]);
+ Put_message(buf);
sprintf(buf, "Account is: %-20s MIT ID number: %s",
UserState(atoi(info[U_STATE])), info[U_MITID]);
Put_message(buf);
+ sprintf(buf, "Windows Home Directory: %s", info[U_WINHOMEDIR]);
+ Put_message(buf);
+ sprintf(buf, "Windows Profile Directory: %s", info[U_WINPROFILEDIR]);
+ Put_message(buf);
status = atoi(info[U_STATE]);
if (status == 0 || status == 2)
{
}
sprintf(buf, "Comments: %s", info[U_COMMENT]);
Put_message(buf);
+ sprintf(buf, "Created by %s on %s.", info[U_CREATOR], info[U_CREATED]);
+ Put_message(buf);
sprintf(buf, MOD_FORMAT, info[U_MODBY], info[U_MODTIME], info[U_MODWITH]);
Put_message(buf);
}
info[U_COMMENT] = strdup("");
info[U_SIGNATURE] = strdup("");
info[U_SECURE] = strdup("0");
+ info[U_WINHOMEDIR] = strdup(DEFAULT_WINHOMEDIR);
+ info[U_WINPROFILEDIR] = strdup(DEFAULT_WINPROFILEDIR);
+ info[U_SPONSOR_TYPE] = strdup("NONE");
+ info[U_SPONSOR_NAME] = strdup("NONE");
+ info[U_EXPIRATION] = strdup("");
info[U_MODTIME] = info[U_MODBY] = info[U_MODWITH] = info[U_END] = NULL;
+ info[U_CREATED] = info[U_CREATOR] = NULL;
return info;
}
{
Put_message("You entered a name which does not follow the capitalization conventions.");
sprintf(temp_buf, "Correct it to \"%s\"", fixname);
- if (YesNoQuestion(temp_buf, 1) == TRUE)
+ if (YesNoQuestion(temp_buf, 0) == TRUE)
{
free(*name);
*name = strdup(fixname);
if (GetValueFromUser("Comments", &info[U_COMMENT]) == SUB_ERROR)
return NULL;
+ if (GetValueFromUser("Windows Home Directory", &info[U_WINHOMEDIR]) ==
+ SUB_ERROR)
+ return NULL;
+
+ if (GetValueFromUser("Windows Profile Directory", &info[U_WINPROFILEDIR]) ==
+ SUB_ERROR)
+ return NULL;
+
+ if (GetTypeFromUser("User's sponsor type", "ace_type", &info[U_SPONSOR_TYPE])
+ == SUB_ERROR)
+ return NULL;
+ if (strcmp(info[U_SPONSOR_TYPE], "NONE") &&
+ GetValueFromUser("Sponsor's Name", &info[U_SPONSOR_NAME]) == SUB_ERROR)
+ return NULL;
+
+ if (GetValueFromUser("Expiration date", &info[U_EXPIRATION]) == SUB_ERROR)
+ return NULL;
+
state = atoi(info[U_STATE]);
if (!name || state == 0 || state == 2)
{
FreeInfo(args);
return DM_NORMAL;
}
- if (strcmp(potype, "POP") && strcmp(potype, "IMAP"))
+ if (strcmp(potype, "POP") && strcmp(potype, "IMAP") && strcmp(potype, "EXCHANGE"))
{
sprintf(temp_buf, "Unknown P.O. Box type.");
Put_message(temp_buf);
int stat;
char buf[BUFSIZ];
- stat = do_mr_query("add_user_reservation", 2, &argv[1],
- NULL, NULL);
- if (stat == MR_STRING)
- {
- sprintf(buf, "The reservation %s is not valid.", argv[2]);
- Put_message(buf);
- PrintReservationTypes();
- }
- else
+ switch (stat = do_mr_query("add_user_reservation", 2, &argv[1],
+ NULL, NULL))
+ {
+ case MR_SUCCESS:
+ break;
+ case MR_STRING:
+ sprintf(buf, "The reservation %s is not valid.", argv[2]);
+ Put_message(buf);
+ PrintReservationTypes();
+ break;
+ default:
com_err(program_name, stat, " in AddUserReservation.");
+ break;
+ }
return DM_NORMAL;
}
int stat;
char buf[BUFSIZ];
- stat = do_mr_query("delete_user_reservation", 2, &argv[1],
- NULL, NULL);
- if (stat == MR_STRING)
+ switch (stat = do_mr_query("delete_user_reservation", 2, &argv[1],
+ NULL, NULL))
{
+ case MR_SUCCESS:
+ break;
+ case MR_STRING:
sprintf(buf, "The reservation %s is not valid.", argv[2]);
Put_message(buf);
PrintReservationTypes();
+ break;
+ default:
+ com_err(program_name, stat, " in DelUserReservation.");
+ break;
}
- else
- com_err(program_name, stat, " in DelUserReservation.");
return DM_NORMAL;
}
struct mqelem *elem = NULL, *top;
char buf[BUFSIZ];
- stat = do_mr_query("get_user_by_reservation", 1, &argv[1],
- StoreInfo, &elem);
- if (stat == MR_STRING)
+ switch (stat = do_mr_query("get_user_by_reservation", 1, &argv[1],
+ StoreInfo, &elem))
{
+ case MR_SUCCESS:
+ break;
+ case MR_STRING:
sprintf(buf, "The reservation %s is not valid.", argv[1]);
Put_message(buf);
PrintReservationTypes();
return DM_NORMAL;
- }
- else
- {
+ default:
com_err(program_name, stat, " in GetUserByReservation.");
return DM_NORMAL;
}
FreeQueue(QueueTop(top));
}
+int UserBySponsor(int argc, char **argv)
+{
+ char buf[BUFSIZ], temp_buf[BUFSIZ], *type, *name;
+ struct mqelem *top;
+
+ type = strdup("USER");
+ if (GetTypeFromUser("Type of sponsor", "search_ace_type", &type) == SUB_ERROR)
+ return DM_NORMAL;
+
+ sprintf(buf, "Name of %s", type);
+ name = strdup(user);
+ if (GetValueFromUser(buf, &name) == SUB_ERROR)
+ return DM_NORMAL;
+
+ switch (YesNoQuestion("Do you want a recursive search (y/n)", FALSE))
+ {
+ case TRUE:
+ sprintf(temp_buf, "R%s", type); /* "USER to "RUSER", etc. */
+ free(type);
+ type = strdup(temp_buf);
+ break;
+ case FALSE:
+ break;
+ default:
+ return DM_NORMAL;
+ }
+
+ top = GetUserBySponsor(type, name);
+ Loop(top, PrintLogin);
+
+ FreeQueue(top);
+ return DM_NORMAL;
+}
+
+static void PrintLogin(char **info)
+{
+ char buf[BUFSIZ];
+
+ sprintf(buf, "Login: %s", info[U_NAME]);
+ Put_message(buf);
+}
+
+struct mqelem *GetUserBySponsor(char *type, char *name)
+{
+ char *args[2];
+ struct mqelem *elem = NULL;
+ int status;
+
+ args[0] = type;
+ args[1] = name;
+ if ((status = do_mr_query("get_user_account_by_sponsor", 2, args, StoreInfo,
+ &elem)))
+ {
+ com_err(program_name, status, " in get_user_account_by_sponsor");
+ return NULL;
+ }
+ return QueueTop(elem);
+}