1 #if (!defined(lint) && !defined(SABER))
2 static char rcsid_module_c[] = "$Header$";
5 /* This is the file pobox.c for the SMS Client, which allows a nieve
6 * user to quickly and easily maintain most parts of the SMS database.
7 * It Contains: Functions for handling the poboxes.
10 * By: Chris D. Peterson
16 * Copyright 1988 by the Massachusetts Institute of Technology.
18 * For further information on copyright and distribution
19 * see the file mit-copyright.h
29 #include "mit-copyright.h"
34 #define FOREIGN_BOX ("SMTP")
35 #define LOCAL_BOX ("POP")
37 /* Function Name: PrintPOBox
38 * Description: Yet another specialized print function.
39 * Arguments: info - all info about this PO_box.
49 sprintf(buf, "Address: %-10s Box: %-35s Type: %s", info[PO_NAME],
50 info[PO_BOX], info[PO_TYPE]);
54 /* Function Name: RealPrintPOMachines
55 * Description: Actually does the printing for PrintPOMachines.
56 * Arguments: info, - name of machines in info[1].
61 RealPrintPOMachines(info)
64 Print(1, info + 1, (char *) NULL);
67 /* Function Name: PrintPOMachines
68 * Description: Prints all current post offices.
70 * Returns: SUB_ERROR if the machines could not be printed.
77 static char * args[] = {"pop", NULL};
78 struct qelem * top = NULL;
80 if ( (status = do_sms_query("get_server_locations", CountArgs(args), args,
81 StoreInfo, (char *)&top)) != SMS_SUCCESS) {
82 com_err(program_name, status, " in get_server_locations.");
87 Loop(top, RealPrintPOMachines);
92 /* Function Name: GetUserPOBox
93 * Description: prints the users POBox information.
94 * Arguments: argc, argv - name of the user in argv[1].
100 GetUserPOBox(argc, argv)
105 struct qelem * top = NULL;
108 if (!ValidName(argv[1]))
111 switch (status = do_sms_query("get_pobox", 1, argv + 1, StoreInfo,
114 Put_message("This user has no P.O. Box.");
117 sprintf(buf,"Current pobox for user %s: \n", argv[1]);
120 Loop(top, PrintPOBox); /* should only return 1 box. */
124 com_err(program_name, status, "in get_pobox.");
129 /* Function Name: GetNewLocalPOBox
130 * Description: get the machine for a new local pop Box for the user.
131 * Arguments: local_user - name of the local user.
132 * Returns: machine - name of the machine for then new pop box, or NULL.
136 GetNewLocalPOBox(local_user)
139 char temp_buf[BUFSIZ];
141 sprintf(temp_buf, "%s did not have a previous local PO Box.", local_user);
142 Put_message(temp_buf);
143 sprintf(temp_buf,"%s %s", "Pick one of the following",
144 "machines for this user's Post Office.");
145 Put_message(temp_buf);
147 if (PrintPOMachines() == SUB_NORMAL) {
149 Prompt_input("Which Machine? ", temp_buf, BUFSIZ);
150 return(canonicalize_hostname(strsave(temp_buf)));
152 Put_message("Could not get machines to choose from, quitting.");
153 return((char *) SUB_ERROR);
156 /* Function Name: SetUserPOBox
157 * Description: Addes or Chnages the P.O. Box for a user.
158 * Arguments: argc, argv - the login name of the user in argv[1].
159 * Returns: DM_NORMAL.
163 SetUserPOBox(argc, argv)
168 char *type, temp_buf[BUFSIZ], *local_user, *args[10], box[BUFSIZ];
170 local_user = argv[1];
172 if (!ValidName(local_user))
175 (void) GetUserPOBox(argc, argv); /* print current info. */
177 sprintf(temp_buf, "Assign %s a local PO Box (y/n)", local_user);
178 switch (YesNoQuestion(temp_buf, TRUE)) {
181 switch (YesNoQuestion("Use Previous Local Box (y/n)", TRUE)) {
183 switch (status = do_sms_query("set_pobox_pop", 1,
184 &local_user, Scream, NULL)) {
188 if ( (temp_box = GetNewLocalPOBox(local_user)) !=
189 (char *) SUB_ERROR) {
190 strcpy(box, temp_box);
197 com_err(program_name, status, "in set_pobox_pop.");
202 if ( (temp_box = GetNewLocalPOBox(local_user)) !=
203 (char *) SUB_ERROR) {
204 strcpy(box, temp_box);
216 sprintf(temp_buf, "Set up a foreign PO Box for %s (y/n)", local_user);
217 switch( YesNoQuestion(temp_buf, TRUE)) {
219 if (!Prompt_input("Foreign PO Box for this user? ", box, BUFSIZ))
224 return(DM_NORMAL); /* ^C hit. */
227 default: /* ^C hit. */
231 args[PO_NAME] = local_user;
232 args[PO_TYPE] = type;
235 if ( (status = do_sms_query("set_pobox", CountArgs(args), args,
236 Scream, NULL)) != SMS_SUCCESS )
237 com_err(program_name, status, " in ChangeUserPOBox");
239 Put_message("PO Box assigned.");
244 /* Function Name: RemoveUserPOBox
245 * Description: Removes this users POBox.
246 * Arguments: argc, argv - name of user in argv[1].
247 * Returns: DM_NORMAL.
252 RemoveUserPOBox(argc, argv)
257 char temp_buf[BUFSIZ];
259 if (!ValidName(argv[1]))
263 "Are you sure that you want to remove %s's PO Box (y/n)", argv[1]);
265 if (Confirm(temp_buf)) {
266 if ( (status = do_sms_query("delete_pobox", 1, argv + 1,
267 Scream, NULL)) != SMS_SUCCESS)
268 com_err(program_name, status, "in delete_pobox.");
270 Put_message("PO Box removed.");