diff options
Diffstat (limited to 'source/smbd/connection.c')
-rw-r--r-- | source/smbd/connection.c | 92 |
1 files changed, 25 insertions, 67 deletions
diff --git a/source/smbd/connection.c b/source/smbd/connection.c index ad394a01ca0..aa8b95a1705 100644 --- a/source/smbd/connection.c +++ b/source/smbd/connection.c @@ -1,5 +1,6 @@ /* - Unix SMB/CIFS implementation. + Unix SMB/Netbios implementation. + Version 1.9. connection claim routines Copyright (C) Andrew Tridgell 1998 @@ -20,6 +21,8 @@ #include "includes.h" + +extern fstring remote_machine; static TDB_CONTEXT *tdb; /**************************************************************************** @@ -28,24 +31,9 @@ static TDB_CONTEXT *tdb; TDB_CONTEXT *conn_tdb_ctx(void) { - if (!tdb) - tdb = tdb_open_log(lock_path("connections.tdb"), 0, TDB_CLEAR_IF_FIRST|TDB_DEFAULT, - O_RDWR | O_CREAT, 0644); - return tdb; } -static void make_conn_key(connection_struct *conn,char *name, TDB_DATA *pkbuf, struct connections_key *pkey) -{ - ZERO_STRUCTP(pkey); - pkey->pid = sys_getpid(); - pkey->cnum = conn?conn->cnum:-1; - fstrcpy(pkey->name, name); - - pkbuf->dptr = (char *)pkey; - pkbuf->dsize = sizeof(*pkey); -} - /**************************************************************************** Delete a connection record. ****************************************************************************/ @@ -55,12 +43,18 @@ BOOL yield_connection(connection_struct *conn,char *name) struct connections_key key; TDB_DATA kbuf; - if (!tdb) - return False; + if (!tdb) return False; DEBUG(3,("Yielding connection to %s\n",name)); - make_conn_key(conn, name, &kbuf, &key); + ZERO_STRUCT(key); + key.pid = sys_getpid(); + key.cnum = conn?conn->cnum:-1; + fstrcpy(key.name, name); + dos_to_unix(key.name); /* Convert key to unix-codepage */ + + kbuf.dptr = (char *)&key; + kbuf.dsize = sizeof(key); if (tdb_delete(tdb, kbuf) != 0) { int dbg_lvl = (!conn && (tdb_error(tdb) == TDB_ERR_NOEXIST)) ? 3 : 0; @@ -116,16 +110,16 @@ static int count_fn( TDB_CONTEXT *the_tdb, TDB_DATA kbuf, TDB_DATA dbuf, void *u Claim an entry in the connections database. ****************************************************************************/ -BOOL claim_connection(connection_struct *conn,char *name,int max_connections,BOOL Clear, uint32 msg_flags) +BOOL claim_connection(connection_struct *conn,char *name,int max_connections,BOOL Clear) { struct connections_key key; struct connections_data crec; TDB_DATA kbuf, dbuf; - if (!tdb) + if (!tdb) { tdb = tdb_open_log(lock_path("connections.tdb"), 0, TDB_CLEAR_IF_FIRST|TDB_DEFAULT, O_RDWR | O_CREAT, 0644); - + } if (!tdb) return False; @@ -161,7 +155,14 @@ BOOL claim_connection(connection_struct *conn,char *name,int max_connections,BOO DEBUG(5,("claiming %s %d\n",name,max_connections)); - make_conn_key(conn, name, &kbuf, &key); + ZERO_STRUCT(key); + key.pid = sys_getpid(); + key.cnum = conn?conn->cnum:-1; + fstrcpy(key.name, name); + dos_to_unix(key.name); /* Convert key to unix-codepage */ + + kbuf.dptr = (char *)&key; + kbuf.dsize = sizeof(key); /* fill in the crec */ ZERO_STRUCT(crec); @@ -175,9 +176,8 @@ BOOL claim_connection(connection_struct *conn,char *name,int max_connections,BOO lp_servicename(SNUM(conn)),sizeof(crec.name)-1); } crec.start = time(NULL); - crec.bcast_msg_flags = msg_flags; - StrnCpy(crec.machine,get_remote_machine_name(),sizeof(crec.machine)-1); + StrnCpy(crec.machine,remote_machine,sizeof(crec.machine)-1); StrnCpy(crec.addr,conn?conn->client_address:client_addr(),sizeof(crec.addr)-1); dbuf.dptr = (char *)&crec; @@ -191,45 +191,3 @@ BOOL claim_connection(connection_struct *conn,char *name,int max_connections,BOO return True; } - -BOOL register_message_flags(BOOL doreg, uint32 msg_flags) -{ - struct connections_key key; - struct connections_data *pcrec; - TDB_DATA kbuf, dbuf; - - if (!tdb) - return False; - - DEBUG(10,("register_message_flags: %s flags 0x%x\n", - doreg ? "adding" : "removing", - (unsigned int)msg_flags )); - - make_conn_key(NULL, "", &kbuf, &key); - - dbuf = tdb_fetch(tdb, kbuf); - if (!dbuf.dptr) { - DEBUG(0,("register_message_flags: tdb_fetch failed\n")); - return False; - } - - pcrec = (struct connections_data *)dbuf.dptr; - pcrec->bcast_msg_flags = msg_flags; - if (doreg) - pcrec->bcast_msg_flags |= msg_flags; - else - pcrec->bcast_msg_flags &= ~msg_flags; - - if (tdb_store(tdb, kbuf, dbuf, TDB_REPLACE) != 0) { - DEBUG(0,("register_message_flags: tdb_store failed with error %s.\n", - tdb_errorstr(tdb) )); - SAFE_FREE(dbuf.dptr); - return False; - } - - DEBUG(10,("register_message_flags: new flags 0x%x\n", - (unsigned int)pcrec->bcast_msg_flags )); - - SAFE_FREE(dbuf.dptr); - return True; -} |