1010 * exceed INITIAL_EXPBUFFER_SIZE (currently 256 bytes).
1111 *
1212 * IDENTIFICATION
13- * $PostgreSQL: pgsql/src/interfaces/libpq/fe-auth.c,v 1.111 2006/02/12 20:04:42 momjian Exp $
13+ * $PostgreSQL: pgsql/src/interfaces/libpq/fe-auth.c,v 1.112 2006/02/12 20:08:29 momjian Exp $
1414 *
1515 *-------------------------------------------------------------------------
1616 */
@@ -101,33 +101,22 @@ pg_an_to_ln(char *aname)
101101 * Various krb5 state which is not connection specific, and a flag to
102102 * indicate whether we have initialised it yet.
103103 */
104- /*
105104static int pg_krb5_initialised ;
106105static krb5_context pg_krb5_context ;
107106static krb5_ccache pg_krb5_ccache ;
108107static krb5_principal pg_krb5_client ;
109108static char * pg_krb5_name ;
110- */
111-
112- struct krb5_info
113- {
114- int pg_krb5_initialised ;
115- krb5_context pg_krb5_context ;
116- krb5_ccache pg_krb5_ccache ;
117- krb5_principal pg_krb5_client ;
118- char * pg_krb5_name ;
119- };
120109
121110
122111static int
123- pg_krb5_init (char * PQerrormsg , struct krb5_info * info )
112+ pg_krb5_init (char * PQerrormsg )
124113{
125114krb5_error_code retval ;
126115
127- if (info -> pg_krb5_initialised )
116+ if (pg_krb5_initialised )
128117return STATUS_OK ;
129118
130- retval = krb5_init_context (& ( info -> pg_krb5_context ) );
119+ retval = krb5_init_context (& pg_krb5_context );
131120if (retval )
132121{
133122snprintf (PQerrormsg ,PQERRORMSG_LENGTH ,
@@ -136,56 +125,46 @@ pg_krb5_init(char *PQerrormsg, struct krb5_info *info)
136125return STATUS_ERROR ;
137126}
138127
139- retval = krb5_cc_default (info -> pg_krb5_context ,& ( info -> pg_krb5_ccache ) );
128+ retval = krb5_cc_default (pg_krb5_context ,& pg_krb5_ccache );
140129if (retval )
141130{
142131snprintf (PQerrormsg ,PQERRORMSG_LENGTH ,
143132"pg_krb5_init: krb5_cc_default: %s\n" ,
144133error_message (retval ));
145- krb5_free_context (info -> pg_krb5_context );
134+ krb5_free_context (pg_krb5_context );
146135return STATUS_ERROR ;
147136}
148137
149- retval = krb5_cc_get_principal (info -> pg_krb5_context ,info -> pg_krb5_ccache ,
150- & ( info -> pg_krb5_client ) );
138+ retval = krb5_cc_get_principal (pg_krb5_context ,pg_krb5_ccache ,
139+ & pg_krb5_client );
151140if (retval )
152141{
153142snprintf (PQerrormsg ,PQERRORMSG_LENGTH ,
154143"pg_krb5_init: krb5_cc_get_principal: %s\n" ,
155144error_message (retval ));
156- krb5_cc_close (info -> pg_krb5_context ,info -> pg_krb5_ccache );
157- krb5_free_context (info -> pg_krb5_context );
145+ krb5_cc_close (pg_krb5_context ,pg_krb5_ccache );
146+ krb5_free_context (pg_krb5_context );
158147return STATUS_ERROR ;
159148}
160149
161- retval = krb5_unparse_name (info -> pg_krb5_context ,info -> pg_krb5_client ,& ( info -> pg_krb5_name ) );
150+ retval = krb5_unparse_name (pg_krb5_context ,pg_krb5_client ,& pg_krb5_name );
162151if (retval )
163152{
164153snprintf (PQerrormsg ,PQERRORMSG_LENGTH ,
165154"pg_krb5_init: krb5_unparse_name: %s\n" ,
166155error_message (retval ));
167- krb5_free_principal (info -> pg_krb5_context ,info -> pg_krb5_client );
168- krb5_cc_close (info -> pg_krb5_context ,info -> pg_krb5_ccache );
169- krb5_free_context (info -> pg_krb5_context );
156+ krb5_free_principal (pg_krb5_context ,pg_krb5_client );
157+ krb5_cc_close (pg_krb5_context ,pg_krb5_ccache );
158+ krb5_free_context (pg_krb5_context );
170159return STATUS_ERROR ;
171160}
172161
173- info -> pg_krb5_name = pg_an_to_ln (info -> pg_krb5_name );
162+ pg_krb5_name = pg_an_to_ln (pg_krb5_name );
174163
175- info -> pg_krb5_initialised = 1 ;
164+ pg_krb5_initialised = 1 ;
176165return STATUS_OK ;
177166}
178167
179- static void
180- pg_krb5_destroy (struct krb5_info * info )
181- {
182- krb5_free_principal (info -> pg_krb5_context ,info -> pg_krb5_client );
183- krb5_cc_close (info -> pg_krb5_context ,info -> pg_krb5_ccache );
184- krb5_free_context (info -> pg_krb5_context );
185- free (info -> pg_krb5_name );
186- }
187-
188-
189168
190169/*
191170 * pg_krb5_authname -- returns a pointer to static space containing whatever
@@ -194,16 +173,10 @@ pg_krb5_destroy(struct krb5_info *info)
194173static const char *
195174pg_krb5_authname (char * PQerrormsg )
196175{
197- char * tmp_name ;
198- struct krb5_info info ;
199- info .pg_krb5_initialised = 0 ;
200-
201- if (pg_krb5_init (PQerrormsg ,& info )!= STATUS_OK )
176+ if (pg_krb5_init (PQerrormsg )!= STATUS_OK )
202177return NULL ;
203- tmp_name = strdup (info .pg_krb5_name );
204- pg_krb5_destroy (& info );
205178
206- return tmp_name ;
179+ return pg_krb5_name ;
207180}
208181
209182
@@ -219,8 +192,6 @@ pg_krb5_sendauth(char *PQerrormsg, int sock, const char *hostname, const char *s
219192krb5_principal server ;
220193krb5_auth_context auth_context = NULL ;
221194krb5_error * err_ret = NULL ;
222- struct krb5_info info ;
223- info .pg_krb5_initialised = 0 ;
224195
225196if (!hostname )
226197{
@@ -229,18 +200,17 @@ pg_krb5_sendauth(char *PQerrormsg, int sock, const char *hostname, const char *s
229200return STATUS_ERROR ;
230201}
231202
232- ret = pg_krb5_init (PQerrormsg , & info );
203+ ret = pg_krb5_init (PQerrormsg );
233204if (ret != STATUS_OK )
234205return ret ;
235206
236- retval = krb5_sname_to_principal (info . pg_krb5_context ,hostname ,servicename ,
207+ retval = krb5_sname_to_principal (pg_krb5_context ,hostname ,servicename ,
237208KRB5_NT_SRV_HST ,& server );
238209if (retval )
239210{
240211snprintf (PQerrormsg ,PQERRORMSG_LENGTH ,
241212"pg_krb5_sendauth: krb5_sname_to_principal: %s\n" ,
242213error_message (retval ));
243- pg_krb5_destroy (& info );
244214return STATUS_ERROR ;
245215}
246216
@@ -255,17 +225,16 @@ pg_krb5_sendauth(char *PQerrormsg, int sock, const char *hostname, const char *s
255225
256226snprintf (PQerrormsg ,PQERRORMSG_LENGTH ,
257227libpq_gettext ("could not set socket to blocking mode: %s\n" ),pqStrerror (errno ,sebuf ,sizeof (sebuf )));
258- krb5_free_principal (info .pg_krb5_context ,server );
259- pg_krb5_destroy (& info );
228+ krb5_free_principal (pg_krb5_context ,server );
260229return STATUS_ERROR ;
261230}
262231
263- retval = krb5_sendauth (info . pg_krb5_context ,& auth_context ,
232+ retval = krb5_sendauth (pg_krb5_context ,& auth_context ,
264233 (krb5_pointer )& sock , (char * )servicename ,
265- info . pg_krb5_client ,server ,
234+ pg_krb5_client ,server ,
266235AP_OPTS_MUTUAL_REQUIRED ,
267236NULL ,0 ,/* no creds, use ccache instead */
268- info . pg_krb5_ccache ,& err_ret ,NULL ,NULL );
237+ pg_krb5_ccache ,& err_ret ,NULL ,NULL );
269238if (retval )
270239{
271240if (retval == KRB5_SENDAUTH_REJECTED && err_ret )
@@ -290,12 +259,12 @@ pg_krb5_sendauth(char *PQerrormsg, int sock, const char *hostname, const char *s
290259}
291260
292261if (err_ret )
293- krb5_free_error (info . pg_krb5_context ,err_ret );
262+ krb5_free_error (pg_krb5_context ,err_ret );
294263
295264ret = STATUS_ERROR ;
296265}
297266
298- krb5_free_principal (info . pg_krb5_context ,server );
267+ krb5_free_principal (pg_krb5_context ,server );
299268
300269if (!pg_set_noblock (sock ))
301270{
@@ -306,7 +275,6 @@ pg_krb5_sendauth(char *PQerrormsg, int sock, const char *hostname, const char *s
306275pqStrerror (errno ,sebuf ,sizeof (sebuf )));
307276ret = STATUS_ERROR ;
308277}
309- pg_krb5_destroy (& info );
310278
311279return ret ;
312280}
@@ -519,9 +487,6 @@ pg_fe_sendauth(AuthRequest areq, PGconn *conn, const char *hostname,
519487char *
520488pg_fe_getauthname (char * PQerrormsg )
521489{
522- #ifdef KRB5
523- const char * krb5_name = NULL ;
524- #endif
525490const char * name = NULL ;
526491char * authn ;
527492
@@ -546,12 +511,7 @@ pg_fe_getauthname(char *PQerrormsg)
546511pglock_thread ();
547512
548513#ifdef KRB5
549- /* pg_krb5_authname gives us a strdup'd value that we need
550- * to free later, however, we don't want to free 'name' directly
551- * in case it's *not* a Kerberos login and we fall through to
552- * name = pw->pw_name; */
553- krb5_name = pg_krb5_authname (PQerrormsg );
554- name = krb5_name ;
514+ name = pg_krb5_authname (PQerrormsg );
555515#endif
556516
557517if (!name )
@@ -567,12 +527,6 @@ pg_fe_getauthname(char *PQerrormsg)
567527
568528authn = name ?strdup (name ) :NULL ;
569529
570- #ifdef KRB5
571- /* Free the strdup'd string from pg_krb5_authname, if we got one */
572- if (krb5_name )
573- free (krb5_name );
574- #endif
575-
576530pgunlock_thread ();
577531
578532return authn ;