1 /*
2  * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
3  * Use is subject to license terms.
4  */
5 
6 #pragma ident	"%Z%%M%	%I%	%E% SMI"
7 
8 /*
9  * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
10  *
11  *	Openvision retains the copyright to derivative works of
12  *	this source code.  Do *NOT* create a derivative of this
13  *	source code before consulting with your legal department.
14  *	Do *NOT* integrate *ANY* of this source code into another
15  *	product before consulting with your legal department.
16  *
17  *	For further information, read the top-level Openvision
18  *	copyright which is contained in the top-level MIT Kerberos
19  *	copyright.
20  *
21  * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
22  *
23  */
24 
25 
26 /* ktutil_ct.c - automatically generated from ktutil_ct.ct */
27 /* Above no longer appears to be true */
28 
29 #include <libintl.h>
30 #include <ss/ss.h>
31 #include "k5-int.h"
32 
33 /*
34  * I18n hack. We sill define gettext(s) to be s here. That way the info_strings
35  * will be extracted to the .po file.
36  */
37 
38 #define	gettext(s) s
39 
40 #ifndef __STDC__
41 #define const
42 #endif
43 
44 static char const * const ssu00001[] = {
45 "clear_list",
46     "clear",
47     (char const *)0
48 };
49 extern void ktutil_clear_list __SS_PROTO;
50 static char const * const ssu00002[] = {
51 "read_kt",
52     "rkt",
53     (char const *)0
54 };
55 extern void ktutil_read_v5 __SS_PROTO;
56 static char const * const ssu00003[] = {
57 "read_st",
58     "rst",
59     (char const *)0
60 };
61 extern void ktutil_read_v4 __SS_PROTO;
62 static char const * const ssu00004[] = {
63 "write_kt",
64     "wkt",
65     (char const *)0
66 };
67 extern void ktutil_write_v5 __SS_PROTO;
68 static char const * const ssu00005[] = {
69 "write_st",
70     "wst",
71     (char const *)0
72 };
73 extern void ktutil_write_v4 __SS_PROTO;
74 static char const * const ssu00006[] = {
75 "add_entry",
76     "addent",
77     (char const *)0
78 };
79 extern void ktutil_add_entry __SS_PROTO;
80 static char const * const ssu00007[] = {
81 "delete_entry",
82     "delent",
83     (char const *)0
84 };
85 extern void ktutil_delete_entry __SS_PROTO;
86 static char const * const ssu00008[] = {
87 "list",
88     "l",
89     (char const *)0
90 };
91 extern void ktutil_list __SS_PROTO;
92 static char const * const ssu00009[] = {
93 "list_requests",
94     "lr",
95     "?",
96     (char const *)0
97 };
98 extern void ss_list_requests __SS_PROTO;
99 static char const * const ssu00010[] = {
100 "quit",
101     "exit",
102     "q",
103     (char const *)0
104 };
105 extern void ss_quit __SS_PROTO;
106 static ss_request_entry ssu00011[] = {
107     { ssu00001,
108       ktutil_clear_list,
109 		gettext("Clear the current keylist."),
110       0 },
111     { ssu00002,
112       ktutil_read_v5,
113 		gettext("Read a krb5 keytab into the current keylist."),
114       0 },
115     { ssu00003,
116       ktutil_read_v4,
117 		gettext("Read a krb4 srvtab into the current keylist."),
118       0 },
119     { ssu00004,
120       ktutil_write_v5,
121 		gettext("Write the current keylist to a krb5 keytab."),
122       0 },
123     { ssu00005,
124       ktutil_write_v4,
125 		gettext("Write the current keylist to a krb4 srvtab."),
126       0 },
127     { ssu00006,
128       ktutil_add_entry,
129 		gettext("Add an entry to the current keylist."),
130       0 },
131     { ssu00007,
132       ktutil_delete_entry,
133 		gettext("Delete an entry from the current keylist."),
134       0 },
135     { ssu00008,
136       ktutil_list,
137 		gettext("List the current keylist."),
138       0 },
139     { ssu00009,
140       ss_list_requests,
141 		gettext("List available requests."),
142       0 },
143     { ssu00010,
144       ss_quit,
145 		gettext("Exit program."),
146       0 },
147     { 0, 0, 0, 0 }
148 };
149 
150 ss_request_table ktutil_cmds = { 2, ssu00011 };
151 
152 #undef gettext
153 
154 /*
155  * This routine is responsible for localizing all the displayable
156  * messages in the table.  This was necessary since ktutil will be
157  * invoking library calls that need to be able to display the messages
158  * in the correct text domain (which only ktutil knows).
159  *
160  * This function assumes that the US version of the messages are
161  * pre-loaded in the table and will be used should gettext not be
162  * successful.  This routine does NOT free the replaced strings as
163  * its expected they may be in the heap (as above) and not malloc'ed.
164  * If the caller malloc'ed the strings, they should retain pointers
165  * and free them if not matching the contents of the table.
166  */
167 krb5_error_code
ktutil_initialize_cmds_table(ss_request_table * ktutil_cmds)168 ktutil_initialize_cmds_table(ss_request_table *ktutil_cmds)
169 {
170 	char *localized_text;
171 	ss_request_entry *ss_cmd;
172 	krb5_error_code retval = 0;
173 
174 	if (ktutil_cmds) {
175 		for (ss_cmd = ktutil_cmds->requests;
176 		ss_cmd->info_string && *(ss_cmd->info_string) != '\0';
177 		++ss_cmd) {
178 			localized_text = gettext(ss_cmd->info_string);
179 
180 			if ((strcmp(localized_text, ss_cmd->info_string))
181 				!= 0) {
182 				ss_cmd->info_string = strdup(localized_text);
183 			}
184 		}
185 	}
186 	else
187 		retval = EINVAL;
188 
189 	return (retval);
190 }
191