Beispiel #1
0
BOOL afs_login(connection_struct *conn)
{
	DATA_BLOB ticket;
	pstring afs_username;
	char *cell;
	BOOL result;
	char *ticket_str;
	DOM_SID user_sid;

	struct ClearToken ct;

	pstrcpy(afs_username, lp_afs_username_map());
	standard_sub_conn(conn, afs_username, sizeof(afs_username));

	if (NT_STATUS_IS_OK(uid_to_sid(&user_sid, conn->uid)))
		pstring_sub(afs_username, "%s", sid_string_static(&user_sid));

	/* The pts command always generates completely lower-case user
	 * names. */
	strlower_m(afs_username);

	cell = strchr(afs_username, '@');

	if (cell == NULL) {
		DEBUG(1, ("AFS username doesn't contain a @, "
			  "could not find cell\n"));
		return False;
	}

	*cell = '\0';
	cell += 1;

	DEBUG(10, ("Trying to log into AFS for user %s@%s\n", 
		   afs_username, cell));

	if (!afs_createtoken(afs_username, cell, &ticket, &ct))
		return False;

	/* For which Unix-UID do we want to set the token? */
	ct.ViceId = getuid();

	ticket_str = afs_encode_token(cell, ticket, &ct);

	result = afs_settoken_str(ticket_str);

	SAFE_FREE(ticket_str);

	data_blob_free(&ticket);

	return result;
}
Beispiel #2
0
static BOOL expand_msdfs_target(connection_struct* conn, pstring target)
{
    pstring mapfilename;
    char *filename_start = strchr_m(target, '@');
    char *filename_end;
    int filename_len;
    pstring targethost;
    pstring new_target;

    if (filename_start == NULL) {
        DEBUG(10, ("No filename start in %s\n", target));
        return False;
    }

    filename_end = strchr_m(filename_start+1, '@');

    if (filename_end == NULL) {
        DEBUG(10, ("No filename end in %s\n", target));
        return False;
    }

    filename_len = PTR_DIFF(filename_end, filename_start+1);
    pstrcpy(mapfilename, filename_start+1);
    mapfilename[filename_len] = '\0';

    DEBUG(10, ("Expanding from table [%s]\n", mapfilename));

    if (!read_target_host(mapfilename, targethost)) {
        DEBUG(1, ("Could not expand target host from file %s\n",
                  mapfilename));
        return False;
    }

    standard_sub_conn(conn, mapfilename, sizeof(mapfilename));

    DEBUG(10, ("Expanded targethost to %s\n", targethost));

    *filename_start = '\0';
    pstrcpy(new_target, target);
    pstrcat(new_target, targethost);
    pstrcat(new_target, filename_end+1);

    DEBUG(10, ("New DFS target: %s\n", new_target));
    pstrcpy(target, new_target);
    return True;
}
Beispiel #3
0
BOOL afs_login(connection_struct *conn)
{
	DATA_BLOB ticket;
	pstring afs_username;
	char *cell;
	BOOL result;

	struct ClearToken ct;

	pstrcpy(afs_username, lp_afs_username_map());
	standard_sub_conn(conn, afs_username, sizeof(afs_username));

	/* The pts command always generates completely lower-case user
	 * names. */
	strlower_m(afs_username);

	cell = strchr(afs_username, '@');

	if (cell == NULL) {
		DEBUG(1, ("AFS username doesn't contain a @, "
			  "could not find cell\n"));
		return False;
	}

	*cell = '\0';
	cell += 1;

	DEBUG(10, ("Trying to log into AFS for user %s@%s\n", 
		   afs_username, cell));

	if (!afs_createtoken(afs_username, cell, &ticket, &ct))
		return False;

	/* For which Unix-UID do we want to set the token? */
	ct.ViceId = getuid();

	{
		char *str, *new_cell;
		DATA_BLOB test_ticket;
		struct ClearToken test_ct;

		hex_encode(ct.HandShakeKey, sizeof(ct.HandShakeKey), &str);
		DEBUG(10, ("Key: %s\n", str));
		free(str);

		str = afs_encode_token(cell, ticket, &ct);

		if (!afs_decode_token(str, &new_cell, &test_ticket,
				      &test_ct)) {
			DEBUG(0, ("Could not decode token"));
			goto decode_failed;
		}

		if (strcmp(cell, new_cell) != 0) {
			DEBUG(0, ("cell changed\n"));
		}

		if ((ticket.length != test_ticket.length) ||
		    (memcmp(ticket.data, test_ticket.data,
			    ticket.length) != 0)) {
			DEBUG(0, ("Ticket changed\n"));
		}

		if (memcmp(&ct, &test_ct, sizeof(ct)) != 0) {
			DEBUG(0, ("ClearToken changed\n"));
		}

		data_blob_free(&test_ticket);

	decode_failed:
		SAFE_FREE(str);
		SAFE_FREE(new_cell);
	}

	result = afs_settoken(cell, &ct, ticket);

	data_blob_free(&ticket);

	return result;
}