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
#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, "Login name: %-20s Full name: %s", info[U_NAME], name);
Put_message(buf);
- sprintf(buf, "User id: %-23s Login shell %-10s Class: %s",
- info[U_UID], info[U_SHELL], info[U_CLASS]);
+ sprintf(buf, "User id: %-23s Login shell: %-10s",
+ info[U_UID], info[U_SHELL]);
+ Put_message(buf);
+ 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_NAME] = strdup(UNIQUE_LOGIN);
info[U_UID] = strdup(UNIQUE_UID);
info[U_SHELL] = strdup(DEFAULT_SHELL);
+ info[U_WINCONSOLESHELL] = strdup(DEFAULT_WINCONSOLESHELL);
info[U_LAST] = strdup(DEFAULT_NONE);
info[U_FIRST] = strdup(DEFAULT_NONE);
info[U_MIDDLE] = strdup(DEFAULT_NONE);
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("User's shell", &info[U_SHELL]) == SUB_ERROR)
return NULL;
+ if (GetValueFromUser("Windows console shell", &info[U_WINCONSOLESHELL])
+ == SUB_ERROR)
+ return NULL;
if (name)
{
if (GetValueFromUser("User's last name", &info[U_LAST]) == SUB_ERROR)
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)
{
char *args[MAX_ARGS_SIZE];
char *login, *potype = NULL;
char temp_buf[BUFSIZ];
- int status;
+ int status, i;
- int i;
for (i = 0; i < MAX_ARGS_SIZE; i++)
- args[i] = NULL;
+ args[i] = NULL;
Put_message("This function has NO kerberos support, so strange things");
Put_message("may happen if you use it to register a user.");
com_err(program_name, stat, " in DeleteKrbMap.");
return DM_NORMAL;
}
+
+int GetUserReservations(int argc, char **argv)
+{
+ int stat;
+ struct mqelem *elem = NULL, *top;
+ char buf[BUFSIZ];
+
+ if ((stat = do_mr_query("get_user_reservations", 1, &argv[1],
+ StoreInfo, &elem)))
+ {
+ com_err(program_name, stat, " in GetUserReservations.");
+ return DM_NORMAL;
+ }
+
+ top = elem = QueueTop(elem);
+ Put_message("");
+ if (!elem)
+ Put_message("No reservations for that user.");
+ while (elem)
+ {
+ char **info = elem->q_data;
+ sprintf(buf, "Reservation: %s", info[0]);
+ Put_message(buf);
+ elem = elem->q_forw;
+ }
+
+ FreeQueue(QueueTop(top));
+ return DM_NORMAL;
+}
+
+int AddUserReservation(int argc, char **argv)
+{
+ int stat;
+ char buf[BUFSIZ];
+
+ 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 DelUserReservation(int argc, char **argv)
+{
+ int stat;
+ char buf[BUFSIZ];
+
+ 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;
+ }
+
+ return DM_NORMAL;
+}
+
+int GetUserByReservation(int argc, char **argv)
+{
+ int stat;
+ struct mqelem *elem = NULL, *top;
+ char buf[BUFSIZ];
+
+ 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;
+ default:
+ com_err(program_name, stat, " in GetUserByReservation.");
+ return DM_NORMAL;
+ }
+
+ top = elem = QueueTop(elem);
+ Put_message("");
+ while (elem)
+ {
+ char **info = elem->q_data;
+ sprintf(buf, "User: %s", info[0]);
+ Put_message(buf);
+ elem = elem->q_forw;
+ }
+
+ FreeQueue(QueueTop(top));
+ return DM_NORMAL;
+}
+
+void PrintReservationTypes(void)
+{
+ int stat;
+ struct mqelem *elem = NULL, *top;
+ char buf[BUFSIZ];
+ char *qargs[2];
+
+ Put_message("Valid types of reservations are: ");
+ Put_message("");
+ qargs[0] = "*";
+ qargs[1] = "RESERVE";
+ qargs[2] = "*";
+ if ((stat = do_mr_query("get_alias", 3, &qargs[0],
+ StoreInfo, &elem)))
+ {
+ com_err(program_name, stat, "in PrintReservationTypes.");
+ }
+ top = elem = QueueTop(elem);
+ while (elem)
+ {
+ char **info = elem->q_data;
+ sprintf(buf, "%s", info[2]);
+ Put_message(buf);
+ elem = elem->q_forw;
+ }
+
+ 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", "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);
+}