]> andersk Git - moira.git/blob - clients/moira/pobox.c
Initial revision
[moira.git] / clients / moira / pobox.c
1 #if (!defined(lint) && !defined(SABER))
2   static char rcsid_module_c[] = "$Header$";
3 #endif lint
4
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.
8  *      
9  *      Created:        7/10/88
10  *      By:             Chris D. Peterson
11  *
12  *      $Source$
13  *      $Author$
14  *      $Header$
15  *      
16  *      Copyright 1988 by the Massachusetts Institute of Technology.
17  *
18  *      For further information on copyright and distribution 
19  *      see the file mit-copyright.h
20  */
21
22 #include <stdio.h>
23 #include <strings.h>
24 #include <ctype.h>
25 #include <sms.h>
26 #include <menu.h>
27
28 #include "mit-copyright.h"
29 #include "defs.h"
30 #include "f_defs.h"
31 #include "globals.h"
32 #include "infodefs.h"
33
34 #define FOREIGN_BOX ("SMTP")
35 #define LOCAL_BOX ("POP")
36
37 /*      Function Name: PrintPOBox
38  *      Description: Yet another specialized print function.
39  *      Arguments: info - all info about this PO_box.
40  *      Returns: SMS_CONT
41  */
42
43 static void
44 PrintPOBox(info)
45 char ** info;
46 {
47     char buf[BUFSIZ];
48     
49     sprintf(buf, "Address: %-10s Box: %-35s Type: %s", info[PO_NAME],
50             info[PO_BOX], info[PO_TYPE]);
51     Put_message(buf);
52 }
53
54 /*      Function Name: RealPrintPOMachines
55  *      Description: Actually does the printing for PrintPOMachines.
56  *      Arguments: info, - name of machines in info[1].
57  *      Returns: none.
58  */
59
60 static void
61 RealPrintPOMachines(info)
62 char ** info;
63 {
64     Print(1, info + 1, (char *) NULL);
65 }
66
67 /*      Function Name: PrintPOMachines
68  *      Description: Prints all current post offices.
69  *      Arguments: none.
70  *      Returns: SUB_ERROR if the machines could not be printed.
71  */
72
73 static int
74 PrintPOMachines()
75 {
76     register int status;
77     static char * args[] = {"pop", NULL};
78     struct qelem * top = NULL;
79     
80     if ( (status = sms_query("get_server_locations", CountArgs(args), args,
81                              StoreInfo, (char *)&top)) != SMS_SUCCESS) {
82         com_err(program_name, status, " in get_server_locations.");
83         return(SUB_ERROR);
84     }
85     
86     top = QueueTop(top);
87     Loop(top, RealPrintPOMachines);
88     FreeQueue(top);
89     return(SUB_NORMAL);
90 }
91
92 /*      Function Name: GetUserPOBox
93  *      Description: prints the users POBox information.
94  *      Arguments: argc, argv - name of the user in argv[1].
95  *      Returns: DM_NORMAL.
96  */
97
98 /* ARGSUSED */
99 int
100 GetUserPOBox(argc, argv)
101 int argc;
102 char ** argv;
103 {
104     register int status;
105     struct qelem * top = NULL;
106     char buf[BUFSIZ];
107
108     if (!ValidName(argv[1]))
109         return(DM_NORMAL);
110     
111     switch (status = sms_query("get_pobox", 1, argv + 1, StoreInfo, 
112                                (char *)&top)) {
113     case SMS_NO_MATCH:
114         Put_message("This user has no P.O. Box.");
115         break;
116     case SMS_SUCCESS:
117         sprintf(buf,"Current pobox for user %s: \n", argv[1]);
118         Put_message("");
119         top = QueueTop(top);
120         Loop(top, PrintPOBox);  /* should only return 1 box. */
121         FreeQueue(top);
122         break;
123     default:
124         com_err(program_name, status, "in get_pobox.");
125     }
126     return(DM_NORMAL);
127 }
128
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.
133  */
134
135 static char *
136 GetNewLocalPOBox(local_user)
137 char * local_user;
138 {
139     char temp_buf[BUFSIZ];
140
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);
146     Put_message("");
147     if (PrintPOMachines() == SUB_NORMAL) {
148         Put_message("");
149         Prompt_input("Which Machine? ", temp_buf, BUFSIZ);
150         return( Strsave(temp_buf) );
151     }
152     Put_message("Could not get machines to choose from, quitting.");
153     return(NULL);
154 }
155
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.
160  */
161
162 int
163 SetUserPOBox(argc, argv)
164 int argc;
165 char **argv;
166 {
167     register int status;
168     char *type, temp_buf[BUFSIZ], *local_user, *args[10], box[BUFSIZ];
169     char *temp_box;
170     local_user = argv[1];
171
172     if (!ValidName(local_user))
173         return(DM_NORMAL);
174     
175     (void) GetUserPOBox(argc, argv); /* print current info. */
176     
177     sprintf(temp_buf, "Assign %s a local PO Box (y/n)", local_user);
178     switch (YesNoQuestion(temp_buf, TRUE)) {
179     case TRUE:
180         type = LOCAL_BOX;
181         switch (YesNoQuestion("Use Previous Local Box (y/n)", TRUE)) {
182         case TRUE:
183             switch (status = sms_query("set_pobox_pop", 1, 
184                                        &local_user, Scream, NULL)) {
185             case SMS_SUCCESS:
186                 return(DM_NORMAL);
187             case SMS_MACHINE:
188                 if ( (temp_box = GetNewLocalPOBox(local_user)) == SUB_NORMAL) {
189                     strcpy(box, temp_box);
190                     free(temp_box);
191                 }
192                 else
193                     return(DM_NORMAL);
194                 break;
195             default:
196                 com_err(program_name, status, "in set_pobox_pop.");
197                 return(DM_NORMAL);
198             }
199         case FALSE:
200                 if ( (temp_box = GetNewLocalPOBox(local_user)) == SUB_NORMAL) {
201                     strcpy(box, temp_box);
202                     free(temp_box);
203                 }
204                 else
205                     return(DM_NORMAL);
206             break;
207         default:
208             return(DM_NORMAL);
209         }
210         break;
211     case FALSE:
212         type = FOREIGN_BOX;
213         sprintf(temp_buf, "Set up a foreign PO Box for %s (y/n)", local_user);
214         switch( YesNoQuestion(temp_buf, TRUE)) {
215         case TRUE:
216             if (!Prompt_input("Foreign PO Box for this user? ", box, BUFSIZ))
217                 return(DM_NORMAL);
218             break;
219         case FALSE:
220         default:
221             return(DM_NORMAL);  /* ^C hit. */
222         }
223         
224         args[PO_NAME] = local_user;
225         args[PO_TYPE] = type;
226         args[PO_BOX] = box;
227         args[PO_END] = NULL;
228         if ( (status = sms_query("set_pobox", CountArgs(args), args, 
229                                  Scream, NULL)) != SMS_SUCCESS )
230             com_err(program_name, status, " in ChangeUserPOBox");
231         else
232             Put_message("PO Box assigned.");
233     default:                    /* ^C hit. */
234         break;
235     }
236     return (DM_NORMAL);
237 }
238
239 /*      Function Name: RemoveUserPOBox
240  *      Description: Removes this users POBox.
241  *      Arguments: argc, argv - name of user in argv[1].
242  *      Returns: DM_NORMAL.
243  */
244
245 /*ARGSUSED */
246 int
247 RemoveUserPOBox(argc, argv)
248 int argc;
249 char ** argv;
250 {
251     register int status;
252     char temp_buf[BUFSIZ];
253    
254     if (!ValidName(argv[1]))
255         return(DM_NORMAL);
256
257     sprintf(temp_buf,
258             "Are you sure that you want to remove %s's PO Box (y/n)", argv[1]);
259     
260     if (Confirm(temp_buf)) {
261         if ( (status = sms_query("delete_pobox", 1, argv + 1, Scream, NULL)) !=
262             SMS_SUCCESS)
263             com_err(program_name, status, "in delete_pobox.");
264         else
265             Put_message("PO Box removed.");
266     }
267     return(DM_NORMAL);
268 }
269
270 /*
271  * Local Variables:
272  * mode: c
273  * c-indent-level: 4
274  * c-continued-statement-offset: 4
275  * c-brace-offset: -4
276  * c-argdecl-indent: 4
277  * c-label-offset: -4
278  * End:
279  */
280
281     
282     
283     
284     
285     
286     
287     
288     
289     
290     
291     
292     
293     
294     
295     
This page took 0.056201 seconds and 5 git commands to generate.