Removed version number from file header.
[samba.git] / source3 / rpc_server / srv_srvsvc_nt.c
index f37096fec3e50d2ad50eeae4fb67f258fd931cc2..148bcb4d1e820b6e188a7b632a870a195becb0ff 100644 (file)
@@ -1,6 +1,5 @@
 /* 
- *  Unix SMB/Netbios implementation.
- *  Version 1.9.
+ *  Unix SMB/CIFS implementation.
  *  RPC Pipe client / server routines
  *  Copyright (C) Andrew Tridgell              1992-1997,
  *  Copyright (C) Luke Kenneth Casson Leighton 1996-1997,
@@ -116,34 +115,46 @@ static void smb_conf_updated(int msg_type, pid_t src, void *buf, size_t len)
  ********************************************************************/
 
 static TDB_CONTEXT *share_tdb; /* used for share security descriptors */
-#define SHARE_DATABASE_VERSION 1
+#define SHARE_DATABASE_VERSION_V1 1
+#define SHARE_DATABASE_VERSION_V2 2 /* version id in little endian. */
 
 BOOL share_info_db_init(void)
 {
-    static pid_t local_pid;
-    char *vstring = "INFO/version";
+       static pid_t local_pid;
+       char *vstring = "INFO/version";
+       int32 vers_id;
  
-    if (share_tdb && local_pid == sys_getpid()) return True;
-    share_tdb = tdb_open_log(lock_path("share_info.tdb"), 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600);
-    if (!share_tdb) {
-        DEBUG(0,("Failed to open share info database %s (%s)\n",
-                               lock_path("share_info.tdb"), strerror(errno) ));
-        return False;
-    }
+       if (share_tdb && local_pid == sys_getpid())
+               return True;
+       share_tdb = tdb_open_log(lock_path("share_info.tdb"), 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600);
+       if (!share_tdb) {
+               DEBUG(0,("Failed to open share info database %s (%s)\n",
+                       lock_path("share_info.tdb"), strerror(errno) ));
+               return False;
+       }
  
-    local_pid = sys_getpid();
+       local_pid = sys_getpid();
  
-    /* handle a Samba upgrade */
-    tdb_lock_bystring(share_tdb, vstring);
-    if (tdb_fetch_int(share_tdb, vstring) != SHARE_DATABASE_VERSION) {
-        tdb_traverse(share_tdb, tdb_traverse_delete_fn, NULL);
-        tdb_store_int(share_tdb, vstring, SHARE_DATABASE_VERSION);
-    }
-    tdb_unlock_bystring(share_tdb, vstring);
+       /* handle a Samba upgrade */
+       tdb_lock_bystring(share_tdb, vstring);
+
+       /* Cope with byte-reversed older versions of the db. */
+       vers_id = tdb_fetch_int32(share_tdb, vstring);
+       if ((vers_id == SHARE_DATABASE_VERSION_V1) || (IREV(vers_id) == SHARE_DATABASE_VERSION_V1)) {
+               /* Written on a bigendian machine with old fetch_int code. Save as le. */
+               tdb_store_int32(share_tdb, vstring, SHARE_DATABASE_VERSION_V2);
+               vers_id = SHARE_DATABASE_VERSION_V2;
+       }
+
+       if (vers_id != SHARE_DATABASE_VERSION_V2) {
+               tdb_traverse(share_tdb, tdb_traverse_delete_fn, NULL);
+               tdb_store_int32(share_tdb, vstring, SHARE_DATABASE_VERSION_V2);
+       }
+       tdb_unlock_bystring(share_tdb, vstring);
 
        message_register(MSG_SMB_CONF_UPDATED, smb_conf_updated);
  
-    return True;
+       return True;
 }
 
 /*******************************************************************