]> andersk Git - moira.git/blob - clients/moira/pobox.c
3620ccf17221af0b5033870ee358c27850d5e147
[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 <sms_app.h>
27 #include <menu.h>
28
29 #include "mit-copyright.h"
30 #include "defs.h"
31 #include "f_defs.h"
32 #include "globals.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 = 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.");
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 = do_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(canonicalize_hostname(strsave(temp_buf)));
151     }
152     Put_message("Could not get machines to choose from, quitting.");
153     return((char *) SUB_ERROR);
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 = do_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)) !=
189                         (char *) SUB_ERROR) {
190                     strcpy(box, temp_box);
191                     free(temp_box);
192                 }
193                 else
194                     return(DM_NORMAL);
195                 break;
196             default:
197                 com_err(program_name, status, "in set_pobox_pop.");
198                 return(DM_NORMAL);
199             }
200             break;
201         case FALSE:
202             if ( (temp_box = GetNewLocalPOBox(local_user)) !=
203                         (char *) SUB_ERROR) {
204                 strcpy(box, temp_box);
205                 free(temp_box);
206             }
207             else
208                 return(DM_NORMAL);
209             break;
210         default:
211             return(DM_NORMAL);
212         }
213         break;
214     case FALSE:
215         type = FOREIGN_BOX;
216         sprintf(temp_buf, "Set up a foreign PO Box for %s (y/n)", local_user);
217         switch( YesNoQuestion(temp_buf, TRUE)) {
218         case TRUE:
219             if (!Prompt_input("Foreign PO Box for this user? ", box, BUFSIZ))
220                 return(DM_NORMAL);
221             break;
222         case FALSE:
223         default:
224             return(DM_NORMAL);  /* ^C hit. */
225         }
226         
227     default:                    /* ^C hit. */
228         break;
229     }
230
231     args[PO_NAME] = local_user;
232     args[PO_TYPE] = type;
233     args[PO_BOX] = box;
234     args[PO_END] = NULL;
235     if ( (status = do_sms_query("set_pobox", CountArgs(args), args, 
236                                 Scream, NULL)) != SMS_SUCCESS )
237         com_err(program_name, status, " in ChangeUserPOBox");
238     else
239         Put_message("PO Box assigned.");
240
241     return (DM_NORMAL);
242 }
243
244 /*      Function Name: RemoveUserPOBox
245  *      Description: Removes this users POBox.
246  *      Arguments: argc, argv - name of user in argv[1].
247  *      Returns: DM_NORMAL.
248  */
249
250 /*ARGSUSED */
251 int
252 RemoveUserPOBox(argc, argv)
253 int argc;
254 char ** argv;
255 {
256     register int status;
257     char temp_buf[BUFSIZ];
258    
259     if (!ValidName(argv[1]))
260         return(DM_NORMAL);
261
262     sprintf(temp_buf,
263             "Are you sure that you want to remove %s's PO Box (y/n)", argv[1]);
264     
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.");
269         else
270             Put_message("PO Box removed.");
271     }
272     return(DM_NORMAL);
273 }
This page took 0.079442 seconds and 3 git commands to generate.