Changeset 204 for branches/samba-3.2.x/source/client/cifs.upcall.c
- Timestamp:
- May 20, 2009, 6:46:53 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/samba-3.2.x/source/client/cifs.upcall.c
r203 r204 30 30 #include "cifs_spnego.h" 31 31 32 const char *CIFSSPNEGO_VERSION = "1. 1";32 const char *CIFSSPNEGO_VERSION = "1.2"; 33 33 static const char *prog = "cifs.upcall"; 34 34 typedef enum _secType { 35 NONE = 0, 35 36 KRB5, 36 37 MS_KRB5 … … 57 58 * ret: 0 - success, others - failure 58 59 */ 59 int handle_krb5_mech(const char *oid, const char *principal, 60 static int 61 handle_krb5_mech(const char *oid, const char *principal, 60 62 DATA_BLOB * secblob, DATA_BLOB * sess_key) 61 63 { … … 74 76 75 77 /* and wrap that in a shiny SPNEGO wrapper */ 76 *secblob = gen_negTokenInit( OID_KERBEROS5, tkt_wrapped);78 *secblob = gen_negTokenInit(oid, tkt_wrapped); 77 79 78 80 data_blob_free(&tkt_wrapped); … … 89 91 #define DKD_MUSTHAVE_SET (DKD_HAVE_HOSTNAME|DKD_HAVE_VERSION|DKD_HAVE_SEC) 90 92 91 int decode_key_description(const char *desc, int *ver, secType_t * sec, 93 static int 94 decode_key_description(const char *desc, int *ver, secType_t * sec, 92 95 char **hostname, uid_t * uid) 93 96 { … … 119 122 retval |= DKD_HAVE_SEC; 120 123 *sec = KRB5; 124 } else if (strncmp(tkn + 4, "mskrb5", 6) == 0) { 125 retval |= DKD_HAVE_SEC; 126 *sec = MS_KRB5; 121 127 } 122 128 } else if (strncmp(tkn, "uid=", 4) == 0) { … … 149 155 } 150 156 151 int cifs_resolver(const key_serial_t key, const char *key_descr) 157 static int 158 cifs_resolver(const key_serial_t key, const char *key_descr) 152 159 { 153 160 int c; … … 201 208 } 202 209 203 void210 static void 204 211 usage(void) 205 212 { … … 213 220 DATA_BLOB secblob = data_blob_null; 214 221 DATA_BLOB sess_key = data_blob_null; 215 secType_t sectype ;222 secType_t sectype = NONE; 216 223 key_serial_t key = 0; 217 224 size_t datalen; 218 225 long rc = 1; 219 uid_t uid ;220 int kernel_upcall_version ;226 uid_t uid = 0; 227 int kernel_upcall_version = 0; 221 228 int c, use_cifs_service_prefix = 0; 222 229 char *buf, *hostname = NULL; 230 const char *oid; 223 231 224 232 openlog(prog, 0, LOG_DAEMON); … … 281 289 SAFE_FREE(buf); 282 290 283 if (kernel_upcall_version !=CIFS_SPNEGO_UPCALL_VERSION) {291 if (kernel_upcall_version > CIFS_SPNEGO_UPCALL_VERSION) { 284 292 syslog(LOG_WARNING, 285 293 "incompatible kernel upcall version: 0x%x", … … 302 310 // do mech specific authorization 303 311 switch (sectype) { 312 case MS_KRB5: 304 313 case KRB5:{ 305 314 char *princ; … … 320 329 strlcpy(princ + 5, hostname, len - 5); 321 330 322 rc = handle_krb5_mech(OID_KERBEROS5, princ, 323 &secblob, &sess_key); 331 if (sectype == MS_KRB5) 332 oid = OID_KERBEROS5_OLD; 333 else 334 oid = OID_KERBEROS5; 335 336 rc = handle_krb5_mech(oid, princ, &secblob, &sess_key); 324 337 SAFE_FREE(princ); 325 338 break; … … 345 358 goto out; 346 359 } 347 keydata->version = CIFS_SPNEGO_UPCALL_VERSION;360 keydata->version = kernel_upcall_version; 348 361 keydata->flags = 0; 349 362 keydata->sesskey_len = sess_key.length;
Note:
See TracChangeset
for help on using the changeset viewer.