*/
#include <afsconfig.h>
+#include <afs/param.h>
+#include <afs/stds.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <sys/types.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_MEMORY_H
-#include <memory.h>
-#endif
-#include <errno.h>
+#include <roken.h>
-#include <sys/stat.h>
-#include <fcntl.h>
+#include <ctype.h>
-#include <sys/param.h>
-#include <sys/errno.h>
-#include <netdb.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <pwd.h>
+#include <afs/ktc.h>
+#include <afs/token.h>
-#include <afs/stds.h>
+#define KERBEROS_APPLE_DEPRECATED(x)
#include <krb5.h>
-#if defined(HAVE_ET_COM_ERR_H)
-#include <et/com_err.h>
+#ifdef HAVE_COM_ERR_H
+# include <com_err.h>
+#elif HAVE_ET_COM_ERR_H
+# include <et/com_err.h>
+#elif HAVE_KRB5_COM_ERR_H
+# include <krb5/com_err.h>
#else
-#include <com_err.h>
+# error No com_err.h? We need some kind of com_err.h
#endif
#ifndef HAVE_KERBEROSV_HEIM_ERR_H
#include <afs/com_err.h>
#endif
-#include <afs/param.h>
#ifdef AFS_SUN5_ENV
#include <sys/ioccom.h>
#endif
-/* Prevent inclusion of des.h to avoid conflicts with des types */
-#define NO_DES_H_INCLUDE
-
#include <afs/auth.h>
#include <afs/cellconfig.h>
#include <afs/vice.h>
#define AKLOG_BADPATH 6
#define AKLOG_MISC 7
-#ifndef NULL
-#define NULL 0
-#endif
-
#ifndef TRUE
#define TRUE 1
#endif
#error "Must have either keyblock or session member of krb5_creds"
#endif
-#if !defined(HAVE_KRB5_524_CONVERT_CREDS) && defined(HAVE_KRB524_CONVERT_CREDS_KDC)
-#define krb5_524_convert_creds krb524_convert_creds_kdc
-#elif !defined(HAVE_KRB5_524_CONVERT_CREDS) && !defined(HAVE_KRB524_CONVERT_CREDS_KDC)
+/* MITKerberosShim logs but returns success */
+#if !defined(HAVE_KRB5_524_CONV_PRINCIPAL) || defined(AFS_DARWIN110_ENV) || (!defined(HAVE_KRB5_524_CONVERT_CREDS) && !defined(HAVE_KRB524_CONVERT_CREDS_KDC))
#define HAVE_NO_KRB5_524
+#elif !defined(HAVE_KRB5_524_CONVERT_CREDS) && defined(HAVE_KRB524_CONVERT_CREDS_KDC)
+#define krb5_524_convert_creds krb524_convert_creds_kdc
#endif
#if USING_HEIMDAL
if (strncmp(str, "unknown", strlen("unknown")) == 0) {
#ifdef HAVE_KRB5_SVC_GET_MSG
krb5_svc_get_msg(code,&str);
+#elif defined(HAVE_KRB5_GET_ERROR_MESSAGE)
+ krb5_context context;
+ krb5_init_context(&context);
+ str = krb5_get_error_message(context, code);
+ krb5_free_context(context);
#else
- str = error_message(code);
+ ; /* IRIX apparently has neither: use the string we have */
#endif
}
fputs(str, stderr);
{
cellinfo_t *new_cellinfo;
- if ((new_cellinfo = (cellinfo_t *)malloc(sizeof(cellinfo_t))))
+ if ((new_cellinfo = malloc(sizeof(cellinfo_t))))
memcpy(new_cellinfo, cellinfo, sizeof(cellinfo_t));
return ((char *)new_cellinfo);
static int
-get_cellconfig(char *cell, struct afsconf_cell *cellconfig, char **local_cell)
+get_cellconfig(const char *config, char *cell,
+ struct afsconf_cell *cellconfig, char **local_cell)
{
int status = AKLOG_SUCCESS;
struct afsconf_dir *configdir;
exit(AKLOG_AFS);
}
- if (!(configdir = afsconf_Open(AFSDIR_CLIENT_ETC_DIRPATH))) {
+ if (!(configdir = afsconf_Open(config))) {
fprintf(stderr,
"%s: can't get afs configuration (afsconf_Open(%s))\n",
- progname, AFSDIR_CLIENT_ETC_DIRPATH);
+ progname, config);
exit(AKLOG_AFS);
}
fprintf(stderr, "%s: Couldn't get %s AFS tickets:\n",
progname, cell->name);
afs_com_err(progname, status, "while getting AFS tickets");
+#ifdef KRB5_CC_NOT_KTYPE
+ if (status == KRB5_CC_NOT_KTYPE) {
+ fprintf(stderr, "allow_weak_crypto may be required in the Kerberos configuration\n");
+ }
+#endif
status = AKLOG_KERBEROS;
goto out;
}
*/
static int
rxkad_build_native_token(krb5_context context, krb5_creds *v5cred,
- struct ktc_token **tokenPtr, char **userPtr) {
+ struct ktc_tokenUnion **tokenPtr, char **userPtr) {
char username[BUFSIZ];
- struct ktc_token *token;
+ struct ktc_token token;
+ int status;
#ifdef HAVE_NO_KRB5_524
char *p;
int len;
#else
- int status;
char k4name[ANAME_SZ];
char k4inst[INST_SZ];
char k4realm[REALM_SZ];
#endif
+ void *inkey = get_cred_keydata(v5cred);
+ size_t inkey_sz = get_cred_keylen(v5cred);
afs_dprintf("Using Kerberos V5 ticket natively\n");
}
#endif
- token = malloc(sizeof(struct ktc_token));
- if (token == NULL)
- return ENOMEM;
+ memset(&token, 0, sizeof(struct ktc_token));
- memset(token, 0, sizeof(struct ktc_token));
+ token.kvno = RXKAD_TKT_TYPE_KERBEROS_V5;
+ token.startTime = v5cred->times.starttime;;
+ token.endTime = v5cred->times.endtime;
+ if (tkt_DeriveDesKey(get_creds_enctype(v5cred), inkey, inkey_sz,
+ &token.sessionKey) != 0) {
+ return RXKADBADKEY;
+ }
+ token.ticketLen = v5cred->ticket.length;
+ memcpy(token.ticket, v5cred->ticket.data, token.ticketLen);
- token->kvno = RXKAD_TKT_TYPE_KERBEROS_V5;
- token->startTime = v5cred->times.starttime;;
- token->endTime = v5cred->times.endtime;
- memcpy(&token->sessionKey, get_cred_keydata(v5cred),
- get_cred_keylen(v5cred));
- token->ticketLen = v5cred->ticket.length;
- memcpy(token->ticket, v5cred->ticket.data, token->ticketLen);
+ status = token_importRxkadViceId(tokenPtr, &token, 0);
+ if (status) {
+ return status;
+ }
- *tokenPtr = token;
*userPtr = strdup(username);
return 0;
#ifdef HAVE_NO_KRB5_524
static int
rxkad_get_converted_token(krb5_context context, krb5_creds *v5cred,
- struct ktc_token **tokenPtr, char **userPtr) {
+ struct ktc_tokenUnion **tokenPtr, char **userPtr) {
*tokenPtr = NULL;
*userPtr = NULL;
#else
static int
rxkad_get_converted_token(krb5_context context, krb5_creds *v5cred,
- struct ktc_token **tokenPtr, char **userPtr) {
+ struct ktc_tokenUnion **tokenPtr, char **userPtr) {
CREDENTIALS cred;
char username[BUFSIZ];
- struct ktc_token *token;
+ struct ktc_token token;
int status;
*tokenPtr = NULL;
strcat (username, cred.pinst);
}
- token = malloc(sizeof(struct ktc_token));
- memset(token, 0, sizeof(struct ktc_token));
+ memset(&token, 0, sizeof(struct ktc_token));
- token->kvno = cred.kvno;
- token->startTime = cred.issue_date;
+ token.kvno = cred.kvno;
+ token.startTime = cred.issue_date;
/*
* It seems silly to go through a bunch of contortions to
* extract the expiration time, when the v5 credentials already
* Note that this isn't a security hole, as the expiration time
* is also contained in the encrypted token
*/
- token->endTime = v5cred->times.endtime;
- memcpy(&token->sessionKey, cred.session, 8);
- token->ticketLen = cred.ticket_st.length;
- memcpy(token->ticket, cred.ticket_st.dat, token->ticketLen);
+ token.endTime = v5cred->times.endtime;
+ memcpy(&token.sessionKey, cred.session, 8);
+ token.ticketLen = cred.ticket_st.length;
+ memcpy(token.ticket, cred.ticket_st.dat, token.ticketLen);
+
+ status = token_importRxkadViceId(tokenPtr, &token, 0);
+ if (status) {
+ return status;
+ }
+
+ *userPtr = strdup(username);
return 0;
}
*/
static int
rxkad_get_token(krb5_context context, struct afsconf_cell *cell, char *realm,
- struct ktc_token **token, char **authuser, int *foreign) {
+ struct ktc_tokenUnion **token, char **authuser, int *foreign) {
krb5_creds *v5cred;
char *realmUsed = NULL;
char *username = NULL;
int status;
- size_t len;
*token = NULL;
*authuser = NULL;
username = NULL;
*foreign = 0;
} else {
- len = strlen(username)+strlen(realmUsed)+2;
- *authuser = malloc(len);
- afs_snprintf(*authuser, len, "%s@%s", username, realmUsed);
+ asprintf(authuser, "%s@%s", username, realmUsed);
*foreign = 1;
}
return status;
}
-static int
-get_kernel_token(struct afsconf_cell *cell, struct ktc_token **tokenPtr) {
- struct ktc_principal client, server;
- struct ktc_token *token;
- int ret;
-
- *tokenPtr = NULL;
-
- strncpy(server.name, AFSKEY, MAXKTCNAMELEN - 1);
- strncpy(server.instance, AFSINST, MAXKTCNAMELEN - 1);
- strncpy(server.cell, cell->name, MAXKTCREALMLEN - 1);
-
- token = malloc(sizeof(struct ktc_token));
- if (token == NULL)
- return ENOMEM;
-
- memset(token, 0, sizeof(struct ktc_token));
-
- ret = ktc_GetToken(&server, token, sizeof(struct ktc_token), &client);
- if (ret) {
- free(token);
- return ret;
- }
-
- *tokenPtr = token;
- return 0;
-}
-
-static int
-set_kernel_token(struct afsconf_cell *cell, char *username,
- struct ktc_token *token, int setpag)
-{
- struct ktc_principal client, server;
-
- strncpy(client.name, username, MAXKTCNAMELEN - 1);
- strcpy(client.instance, "");
- strncpy(client.cell, cell->name, MAXKTCREALMLEN - 1);
-
- strncpy(server.name, AFSKEY, MAXKTCNAMELEN - 1);
- strncpy(server.instance, AFSINST, MAXKTCNAMELEN - 1);
- strncpy(server.cell, cell->name, MAXKTCREALMLEN - 1);
-
- return ktc_SetToken(&server, token, &client, setpag);
-}
-
-static int
-tokens_equal(struct ktc_token *tokenA, struct ktc_token *tokenB) {
- return (tokenA != NULL && tokenB != NULL &&
- tokenA->kvno == tokenB->kvno &&
- tokenA->ticketLen == tokenB->ticketLen &&
- !memcmp(&tokenA->sessionKey, &tokenB->sessionKey,
- sizeof(tokenA->sessionKey)) &&
- !memcmp(tokenA->ticket, tokenB->ticket, tokenA->ticketLen));
-}
-
-/*
+/*
* Log to a cell. If the cell has already been logged to, return without
* doing anything. Otherwise, log to it and mark that it has been logged
* to.
*/
static int
-auth_to_cell(krb5_context context, char *cell, char *realm, char **linkedcell)
+auth_to_cell(krb5_context context, const char *config,
+ char *cell, char *realm, char **linkedcell)
{
int status = AKLOG_SUCCESS;
int isForeign = 0;
afs_int32 viceId; /* AFS uid of user */
char *local_cell = NULL;
- struct ktc_token *token;
- struct ktc_token *btoken;
+ struct ktc_tokenUnion *rxkadToken = NULL;
+ struct ktc_setTokenData *token;
+ struct ktc_setTokenData *btoken = NULL;
struct afsconf_cell cellconf;
/* NULL or empty cell returns information on local cell */
- if ((status = get_cellconfig(cell, &cellconf, &local_cell)))
+ if ((status = get_cellconfig(config, cell, &cellconf, &local_cell)))
return(status);
if (linkedcell != NULL) {
afs_dprintf("Authenticating to cell %s (server %s).\n", cellconf.name,
cellconf.hostName[0]);
- status = rxkad_get_token(context, &cellconf, realm, &token,
+ token = token_buildTokenJar(cellconf.name);
+ if (token == NULL) {
+ status = ENOMEM;
+ goto out;
+ }
+
+ status = rxkad_get_token(context, &cellconf, realm, &rxkadToken,
&username, &isForeign);
if (status)
- return status;
+ goto out;
+ /* We need to keep the token structure around so that we can stick
+ * the viceId into it (once we know it) */
+ status = token_addToken(token, rxkadToken);
+ if (status) {
+ afs_dprintf("Add Token failed with %d", status);
+ goto out;
+ }
if (!force &&
- !get_kernel_token(&cellconf, &btoken) &&
- tokens_equal(token, btoken)) {
+ ktc_GetTokenEx(cellconf.name, &btoken) == 0 &&
+ token_SetsEquivalent(token, btoken)) {
+
+ token_FreeSet(&btoken);
afs_dprintf("Identical tokens already exist; skipping.\n");
status = AKLOG_SUCCESS;
goto out;
}
+ if (btoken)
+ token_FreeSet(&btoken);
+
#ifdef FORCE_NOPRDB
noprdb = 1;
#endif
username, cellconf.name);
viceId = 0;
- status = set_kernel_token(&cellconf, username, token, 0);
+ status = ktc_SetTokenEx(token);
if (status) {
afs_com_err(progname, status,
"while obtaining tokens for cell %s",
/*
* In case you're wondering, we don't need to change the
* filename here because we're still connecting to the
- * same cell -- we're just using a different authentication
+ * same cell -- we're just using a different authenticat ion
* level
*/
}
#endif /* ALLOW_REGISTER */
- /*
- * This is a crock, but it is Transarc's crock, so we have to play
- * along in order to get the functionality. The way the afs id is
- * stored is as a string in the username field of the token.
- * Contrary to what you may think by looking at the code for
- * tokens, this hack (AFS ID %d) will not work if you change %d
- * to something else.
- */
-
if ((status == 0) && (viceId != ANONYMOUSID)) {
- free(username);
- if (afs_asprintf(&username, "AFS ID %d", (int) viceId) < 0) {
- status = ENOMEM;
- username = NULL;
- goto out;
+ status = token_setRxkadViceId(rxkadToken, viceId);
+ if (status) {
+ fprintf(stderr, "Error %d setting rxkad ViceId\n", status);
+ status = AKLOG_SUCCESS;
+ } else {
+ token_replaceToken(token, rxkadToken);
}
}
}
- afs_dprintf("Set username to %s\n", username);
-
afs_dprintf("Setting tokens. %s @ %s \n", username, cellconf.name);
#ifndef AFS_AIX51_ENV
*/
write(2,"",0); /* dummy write */
#endif
- status = set_kernel_token(&cellconf, username, token, afssetpag);
+ token_setPag(token, afssetpag);
+ status = ktc_SetTokenEx(token);
if (status) {
- afs_com_err(progname, status, "while obtaining tokens for cell %s",
+ afs_com_err(progname, status, "while setting tokens for cell %s",
cellconf.name);
status = AKLOG_TOKEN;
}
afs_dprintf("Noauth mode; not authenticating.\n");
out:
+ if (rxkadToken) {
+ token_freeToken(&rxkadToken);
+ }
+
if (local_cell)
free(local_cell);
if (username)
struct ViceIoctl vio;
char cellname[BUFSIZ];
- memset(our_file, 0, sizeof(our_file));
- strcpy(our_file, file);
+ strlcpy(our_file, file, sizeof(our_file));
if ((last_component = strrchr(our_file, DIR))) {
*last_component++ = 0;
vio.out = cellname;
if (!pioctl(file, VIOC_FILE_CELL_NAME, &vio, 1)) {
- strcat(cellname, VOLMARKERSTRING);
- strcat(cellname, mountpoint + 1);
+ strlcat(cellname, VOLMARKERSTRING, sizeof(cellname));
+ strlcat(cellname, mountpoint + 1, sizeof(cellname));
memset(mountpoint + 1, 0, size - 1);
strcpy(mountpoint + 1, cellname);
}
if (origpath) {
memset(path, 0, sizeof(path));
memset(pathtocheck, 0, sizeof(pathtocheck));
- strcpy(path, origpath);
+ strlcpy(path, origpath, sizeof(path));
last_comp = path;
symlinkcount = 0;
return(NULL);
? elast_comp - last_comp : strlen(last_comp);
strncat(pathtocheck, last_comp, len);
memset(linkbuf, 0, sizeof(linkbuf));
- if ((link = (readlink(pathtocheck, linkbuf,
- sizeof(linkbuf)) > 0))) {
+ link = readlink(pathtocheck, linkbuf, sizeof(linkbuf)-1);
+
+ if (link > 0) {
+ linkbuf[link] = '\0'; /* NUL terminate string */
+
if (++symlinkcount > MAXSYMLINKS) {
fprintf(stderr, "%s: %s\n", progname, strerror(ELOOP));
exit(AKLOG_BADPATH);
}
+
memset(tmpbuf, 0, sizeof(tmpbuf));
if (elast_comp)
- strcpy(tmpbuf, elast_comp);
+ strlcpy(tmpbuf, elast_comp, sizeof(tmpbuf));
if (linkbuf[0] == DIR) {
/*
* If this is a symbolic link to an absolute path,
* every cell it encounters along the way.
*/
static int
-auth_to_path(krb5_context context, char *path)
+auth_to_path(krb5_context context, const char *config, char *path)
{
int status = AKLOG_SUCCESS;
int auth_status = AKLOG_SUCCESS;
/* Initialize */
if (path[0] == DIR)
- strcpy(pathtocheck, path);
+ strlcpy(pathtocheck, path, sizeof(pathtocheck));
else {
if (getcwd(pathtocheck, sizeof(pathtocheck)) == NULL) {
fprintf(stderr, "Unable to find current working directory:\n");
exit(AKLOG_BADPATH);
}
else {
- strcat(pathtocheck, DIRSTRING);
- strcat(pathtocheck, path);
+ strlcat(pathtocheck, DIRSTRING, sizeof(pathtocheck));
+ strlcat(pathtocheck, path, sizeof(pathtocheck));
}
}
next_path(pathtocheck);
/* Go on to the next level down the path */
while ((nextpath = next_path(NULL))) {
- strcpy(pathtocheck, nextpath);
+ strlcpy(pathtocheck, nextpath, sizeof(pathtocheck));
afs_dprintf("Checking directory %s\n", pathtocheck);
/*
* If this is an afs mountpoint, determine what cell from
add_hosts(pathtocheck);
if ((endofcell = strchr(mountpoint, VOLMARKER))) {
*endofcell = '\0';
- if ((auth_status = auth_to_cell(context, cell, NULL, NULL))) {
+ auth_status = auth_to_cell(context, config, cell, NULL, NULL);
+ if (auth_status) {
if (status == AKLOG_SUCCESS)
status = auth_status;
else if (status != auth_status)
linked_list paths; /* List of paths to log to */
ll_node *cur_node;
char *linkedcell;
+ const char *config = AFSDIR_CLIENT_ETC_DIRPATH;
memset(&cellinfo, 0, sizeof(cellinfo));
else
progname = argv[0];
- krb5_init_context(&context);
+#if defined(KRB5_PROG_ETYPE_NOSUPP) && !(defined(HAVE_KRB5_ENCTYPE_ENABLE) || defined(HAVE_KRB5_ALLOW_WEAK_CRYPTO))
+ {
+ char *filepath = NULL, *newpath = NULL;
+#ifndef AFS_DARWIN_ENV
+ char *defaultpath = "/etc/krb5.conf:/etc/krb5/krb5.conf";
+#else
+ char *defaultpath = "~/Library/Preferences/edu.mit.Kerberos:/Library/Preferences/edu.mit.Kerberos";
+#endif
+ filepath = getenv("KRB5_CONFIG");
+
+ /* only fiddle with KRB5_CONFIG if krb5-weak.conf actually exists */
+ asprintf(&newpath, "%s/krb5-weak.conf", AFSDIR_CLIENT_ETC_DIRPATH);
+ if (access(newpath, R_OK) == 0) {
+ free(newpath);
+ newpath = NULL;
+ asprintf(&newpath, "%s:%s/krb5-weak.conf",
+ filepath ? filepath : defaultpath,
+ AFSDIR_CLIENT_ETC_DIRPATH);
+ setenv("KRB5_CONFIG", newpath, 1);
+ }
+#endif
+ krb5_init_context(&context);
+
+#if defined(KRB5_PROG_ETYPE_NOSUPP) && !(defined(HAVE_KRB5_ENCTYPE_ENABLE) || defined(HAVE_KRB5_ALLOW_WEAK_CRYPTO))
+ free(newpath);
+ if (filepath)
+ setenv("KRB5_CONFIG", filepath, 1);
+ else
+ unsetenv("KRB5_CONFIG");
+ }
+#endif
initialize_KTC_error_table ();
initialize_U_error_table();
initialize_RXK_error_table();
* krb5_allow_weak_crypto is MIT Kerberos 1.8. krb5_enctype_enable is
* Heimdal.
*/
-#if defined(HAVE_KRB5_ALLOW_WEAK_CRYPTO)
- krb5_allow_weak_crypto(context, 1);
-#elif defined(HAVE_KRB5_ENCTYPE_ENABLE)
+#if defined(HAVE_KRB5_ENCTYPE_ENABLE)
i = krb5_enctype_valid(context, ETYPE_DES_CBC_CRC);
if (i)
krb5_enctype_enable(context, ETYPE_DES_CBC_CRC);
+#elif defined(HAVE_KRB5_ALLOW_WEAK_CRYPTO)
+ krb5_allow_weak_crypto(context, 1);
#endif
/* Initialize list of cells to which we have authenticated */
(strcmp(argv[i], "-c") == 0)) && !pmode)
if (++i < argc) {
cmode++;
- strcpy(cell, argv[i]);
+ strlcpy(cell, argv[i], sizeof(cell));
}
else
usage();
(strcmp(argv[i], "-p") == 0)) && !cmode)
if (++i < argc) {
pmode++;
- strcpy(path, argv[i]);
+ strlcpy(path, argv[i], sizeof(path));
+ }
+ else
+ usage();
+ else if (strcmp(argv[i], "-config") == 0)
+ if (++i < argc) {
+ config = argv[i];
}
else
usage();
-
else if (argv[i][0] == '-')
usage();
else if (!pmode && !cmode) {
if (strchr(argv[i], DIR) || (strcmp(argv[i], ".") == 0) ||
(strcmp(argv[i], "..") == 0)) {
pmode++;
- strcpy(path, argv[i]);
+ strlcpy(path, argv[i], sizeof(path));
}
else {
cmode++;
- strcpy(cell, argv[i]);
+ strlcpy(cell, argv[i], sizeof(path));
}
}
else
if (((i + 1) < argc) && (strcmp(argv[i + 1], "-k") == 0)) {
i+=2;
if (i < argc)
- strcpy(realm, argv[i]);
+ strlcpy(realm, argv[i], sizeof(realm));
else
usage();
}
if ((cells.nelements + paths.nelements) == 0) {
struct passwd *pwd;
- status = auth_to_cell(context, NULL, NULL, &linkedcell);
+ status = auth_to_cell(context, config, NULL, NULL, &linkedcell);
/* If this cell is linked to a DCE cell, and user requested -linked,
* get tokens for both. This is very useful when the AFS cell is
if (!status && linked && linkedcell != NULL) {
afs_dprintf("Linked cell: %s\n", linkedcell);
- status = auth_to_cell(context, linkedcell, NULL, NULL);
+ status = auth_to_cell(context, config, linkedcell, NULL, NULL);
}
if (linkedcell) {
free(linkedcell);
FILE *f;
char fcell[100], xlog_path[512];
- strcpy(xlog_path, pwd->pw_dir);
- strcat(xlog_path, "/.xlog");
+ strlcpy(xlog_path, pwd->pw_dir, sizeof(xlog_path));
+ strlcat(xlog_path, "/.xlog", sizeof(xlog_path));
if ((stat(xlog_path, &sbuf) == 0) &&
((f = fopen(xlog_path, "r")) != NULL)) {
afs_dprintf("Found cell %s in %s.\n", fcell, xlog_path);
- auth_status = auth_to_cell(context, fcell, NULL, NULL);
+ auth_status = auth_to_cell(context, config, fcell, NULL, NULL);
if (status == AKLOG_SUCCESS)
status = auth_status;
else
/* Log to all cells in the cells list first */
for (cur_node = cells.first; cur_node; cur_node = cur_node->next) {
memcpy((char *)&cellinfo, cur_node->data, sizeof(cellinfo));
- if ((status = auth_to_cell(context, cellinfo.cell, cellinfo.realm,
- &linkedcell)))
+ status = auth_to_cell(context, config, cellinfo.cell,
+ cellinfo.realm, &linkedcell);
+ if (status) {
somethingswrong++;
- else {
+ } else {
if (linked && linkedcell != NULL) {
afs_dprintf("Linked cell: %s\n", linkedcell);
- if ((status = auth_to_cell(context, linkedcell,
- cellinfo.realm, NULL)))
+ status = auth_to_cell(context, config, linkedcell,
+ cellinfo.realm, NULL);
+ if (status)
somethingswrong++;
}
if (linkedcell != NULL) {
/* Then, log to all paths in the paths list */
for (cur_node = paths.first; cur_node; cur_node = cur_node->next) {
- if ((status = auth_to_path(context, cur_node->data)))
+ status = auth_to_path(context, config, cur_node->data);
+ if (status)
somethingswrong++;
}
EncTicketPart enc_tkt_reply[1];
krb5_address address[30];
krb5_addresses faddr[1];
- int temp_vno[1];
+ unsigned int temp_vno[1];
time_t temp_time[2];
#else
krb5_ticket ticket_reply[1];
if(buf_len != buf_size) {
afs_com_err(progname, code,
- "%d != %d while encoding ticket (internal ASN.1 encoder error",
- buf_len, buf_size);
+ "%u != %u while encoding ticket (internal ASN.1 encoder error",
+ (unsigned int)buf_len, (unsigned int)buf_size);
goto cleanup;
}
what = "krb5_crypto_init";
}
} /* crypto block */
ticket_reply->enc_part.etype = deref_entry_enctype(entry);
- ticket_reply->enc_part.kvno = temp_vno;
+ ticket_reply->enc_part.kvno = (void *)temp_vno;
*ticket_reply->enc_part.kvno = entry->vno;
ticket_reply->tkt_vno = 5;
#else
if ((r = krb5_build_principal(context, &increds.server,
strlen(realm), realm,
name,
- (inst && strlen(inst)) ? inst : (void *) NULL,
- (void *) NULL))) {
+ (inst && strlen(inst)) ? inst : NULL,
+ NULL))) {
return r;
}
increds.client = client_principal;
increds.times.endtime = 0;
- /* Ask for DES since that is what V4 understands */
- get_creds_enctype((&increds)) = ENCTYPE_DES_CBC_CRC;
+ if (do524)
+ /* Ask for DES since that is what V4 understands */
+ get_creds_enctype((&increds)) = ENCTYPE_DES_CBC_CRC;
if (keytab) {
int allowed_enctypes[] = {
*realm = NULL;
- if (!_krb425_ccache)
- krb5_cc_default(context, &_krb425_ccache);
+ if (!_krb425_ccache) {
+ r = krb5_cc_default(context, &_krb425_ccache);
+ if (r)
+ return r;
+ }
if (!client_principal) {
if (client) {
r = krb5_parse_name(context, client, &client_principal);