int DeleteKrbmap(int argc, char **argv);
int GetDirFlags(int argc, char **argv);
int SetDirFlags(int argc, char **argv);
+int GetUserReservations(int argc, char **argv);
+int AddUserReservation(int argc, char **argv);
+int DelUserReservation(int argc, char **argv);
+int GetUserByReservation(int argc, char **argv);
+void PrintReservationTypes(void);
/* printer.c */
int GetPrn(int argc, char **argv);
}
};
+/* User Reservations Menu */
+Menu reservations_menu = {
+ NULLFUNC,
+ NULLFUNC,
+ "User Reservations Menu",
+ 4,
+ {
+ { GetUserReservations, NULLMENU, 2, {
+ { "get", "Get User Reservations" },
+ { "login name", "User login name: " },
+ } },
+ { AddUserReservation, NULLMENU, 3, {
+ { "add", "Add User Reservation" },
+ { "login name", "User login name: " },
+ { "reservation", "Reservation: " },
+ } },
+ { DelUserReservation, NULLMENU, 3, {
+ { "delete", "Delete User Reservation" },
+ { "login name", "User login name: " },
+ { "reservation", "Reservation: " },
+ } },
+ { GetUserByReservation, NULLMENU, 2, {
+ { "getres", "Get Users by Reservation" },
+ { "reservation", "Reservation: " },
+ } },
+ }
+};
+
/* ------------------------- First Tier Menus ------------------------- */
/*
NULLFUNC,
NULLFUNC,
"User Menu",
- 11,
+ 12,
{
{ShowUserByLogin, NULLMENU, 2, {
{"login", "Show user information by login name"},
} },
SUBMENU("pobox", "Post Office Box Menu", &pobox_menu),
SUBMENU("krbmap", "User Kerberos Mappings", &krbmap_menu),
+ SUBMENU("reservations", "User Reservations Menu", &reservations_menu),
}
};
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];
+
+ 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
+ com_err(program_name, stat, " in AddUserReservation.");
+
+ return DM_NORMAL;
+}
+
+int DelUserReservation(int argc, char **argv)
+{
+ int stat;
+ char buf[BUFSIZ];
+
+ stat = do_mr_query("delete_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
+ com_err(program_name, stat, " in DelUserReservation.");
+
+ return DM_NORMAL;
+}
+
+int GetUserByReservation(int argc, char **argv)
+{
+ int stat;
+ 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)
+ {
+ sprintf(buf, "The reservation %s is not valid.", argv[1]);
+ Put_message(buf);
+ PrintReservationTypes();
+ return DM_NORMAL;
+ }
+ else
+ {
+ 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));
+}
+