Author: jerry
Date: 2005-08-12 16:02:41 +0000 (Fri, 12 Aug 2005)
New Revision: 9265

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=9265

Log:
compile fixes and cleanup; still a work in progress
Modified:
   trunk/source/services/services_db.c


Changeset:
Modified: trunk/source/services/services_db.c
===================================================================
--- trunk/source/services/services_db.c 2005-08-12 16:00:54 UTC (rev 9264)
+++ trunk/source/services/services_db.c 2005-08-12 16:02:41 UTC (rev 9265)
@@ -21,19 +21,11 @@
 
 #include "includes.h"
 
-#if 0
-
-/* backend database routines for services.tdb */
-
-#define SERVICEDB_VERSION_V1 1 /* Will there be more? */
 #define INTERNAL_SERVICES_LIST "NETLOGON Spooler"
 
-/*                                                                             
                                        */
-/* scripts will execute from the following libdir, if they are in the enable 
svcctl=<list of scripts>                  */
-/* these should likely be symbolic links. Note that information about them 
will be extracted from the files themselves */
-/* using the LSB standard keynames for various information                     
                                        */
-
+#define SERVICEDB_VERSION_V1 1
 #define SCVCTL_DATABASE_VERSION_V1 1
+
 static TDB_CONTEXT *service_tdb; /* used for services tdb file */
 
 /* there are two types of services -- internal, and external.
@@ -67,48 +59,41 @@
 } Internal_service_description;
 
 
-static const Internal_service_description ISD[] = {
-       { "NETLOGON",   "Net Logon",    "Provides logon and authentication 
service to the network",     0x110,  NULL, NULL},
-       { "Spooler",    "Spooler",      "Printing Services",                    
                        0x0020, NULL, NULL},
-       { NULL, NULL, NULL, 0, NULL, NULL}
-};
-
-
 /********************************************************************
- allocate an array of external services and return them. Null return 
- is okay, make sure &added is also zero! 
 ********************************************************************/
 
-int num_external_services(void)
+int num_external_services( void )
 {
        int num_services;
        char **svc_list;
        pstring keystring, external_services_string;
-       TDB_DATA key_data;
+       TDB_DATA data;
 
 
-       if (!service_tdb) {
+       if ( !service_tdb ) {
                DEBUG(8,("enum_external_services: service database is not 
open!!!\n"));
-               num_services = 0;
-       } else {
-               pstrcpy(keystring,"EXTERNAL_SERVICES");
-               key_data = tdb_fetch_bystring(service_tdb, keystring);
+               return 0;
+       }
+       
+       pstrcpy(keystring,"EXTERNAL_SERVICES");
+       data = tdb_fetch_bystring(service_tdb, keystring);
 
-               if ((key_data.dptr != NULL) && (key_data.dsize != 0)) {
-                       
strncpy(external_services_string,key_data.dptr,key_data.dsize);
-                       external_services_string[key_data.dsize] = 0;
-                       DEBUG(8,("enum_external_services: services list is %s, 
size is %d\n",external_services_string,key_data.dsize));
-               }
-       } 
+       if ( data.dptr && data.dsize ) {
+               strncpy( external_services_string, data.dptr, data.dsize );
+               external_services_string[data.dsize] = 0;
+               DEBUG(8,("enum_external_services: services list is %s, size is 
%d\n",
+                       external_services_string, data.dsize));
+       }
+       
+       SAFE_FREE( data.dptr );
+       
        svc_list = str_list_make(external_services_string,NULL);
- 
        num_services = str_list_count( (const char **)svc_list);
 
        return num_services;
 }
 
 
-
 /********************************************************************
   Gather information on the "external services". These are services 
   listed in the smb.conf file, and found to exist through checks in 
@@ -171,7 +156,7 @@
        }
 
 #if 0
-/* *svc_ptr has the pointer to the array if there is one already. NULL if not. 
*/
+       /* *svc_ptr has the pointer to the array if there is one already. NULL 
if not. */
        if ((existing_services>0) && svc_ptr && *svc_ptr) { /* reallocate vs. 
allocate */
                DEBUG(8,("enum_external_services: REALLOCing %x to %d 
services\n", *svc_ptr, existing_services+num_services));
 
@@ -347,23 +332,28 @@
 
 BOOL get_service_info(TDB_CONTEXT *stdb,char *service_name, Service_info *si) 
 {
+       pstring keystring,sn;
+       TDB_DATA kbuf, dbuf;
 
-  pstring keystring,sn;
-  TDB_DATA kbuf, dbuf;
-  if ((stdb == NULL) || (si == NULL) || (service_name==NULL) || (*service_name 
== 0)) return False;
+       if ((stdb == NULL) || (si == NULL) || (service_name==NULL) || 
(*service_name == 0)) 
+               return False;
 
-  /* TODO  - error handling -- what if the service isn't in the DB?  */
-  slprintf(keystring, sizeof(keystring)-1, "SVCCTL/SERVICE_INFO/%s", 
service_name);
-  /* tdb_lock_bystring(stdb, keystring, 0); */
-  DEBUGADD(10, ("_svcctl_read_service_tdb_to_si: Key is  [%s]\n", keystring));
-  kbuf.dptr = keystring;
-  kbuf.dsize = strlen(keystring)+1;
-  dbuf = tdb_fetch(stdb, kbuf);
-  if (!dbuf.dptr) {
-        DEBUGADD(10, ("_svcctl_read_service_tdb_to_si: Could not find record 
associated with [%s]\n", keystring));
-       return False;
-  }
-  tdb_unpack(dbuf.dptr, dbuf.dsize, "PPPPPPPPPPP",
+       /* TODO  - error handling -- what if the service isn't in the DB?  */
+
+       slprintf(keystring, sizeof(keystring)-1, "SVCCTL/SERVICE_INFO/%s", 
service_name);
+
+       /* tdb_lock_bystring(stdb, keystring, 0); */
+
+       DEBUGADD(10, ("_svcctl_read_service_tdb_to_si: Key is  [%s]\n", 
keystring));
+       kbuf.dptr = keystring;
+       kbuf.dsize = strlen(keystring)+1;
+       dbuf = tdb_fetch(stdb, kbuf);
+
+       if (!dbuf.dptr) {
+               DEBUGADD(10, ("_svcctl_read_service_tdb_to_si: Could not find 
record associated with [%s]\n", keystring));
+               return False;
+       }
+       tdb_unpack(dbuf.dptr, dbuf.dsize, "PPPPPPPPPPP",
                          sn,
                          si->servicetype,
                          si->filename,
@@ -375,8 +365,10 @@
                          si->requiredstop,
                          si->description,
                          si->shortdescription);
-  SAFE_FREE(dbuf.dptr);
-  return True;
+
+       SAFE_FREE(dbuf.dptr);
+
+       return True;
 }
 
 /*********************************************************************
@@ -388,12 +380,16 @@
        pstring pbuf;
        int len;
        TDB_DATA kbuf,dbuf;
+
        /* Note -- when we write to the tdb, we "index" on the filename field, 
not the nice name.
           when a service is "opened", it is opened by the nice (SERVICENAME) 
name, not the file name. So there needs to be a mapping from
           nice name back to the file name. */
 
-       if ((stdb == NULL) || (si == NULL) || (service_name==NULL) || 
(*service_name == 0)) return False;
+       if ((stdb == NULL) || (si == NULL) || (service_name==NULL) || 
(*service_name == 0)) 
+               return False;
+
        /* todo - mayke the service type an ENUM, add any security descriptor 
structures into it */
+
        len= tdb_pack(pbuf,sizeof(pbuf),"PPPPPPPPPPP",
                      
service_name,si->servicetype,si->filename,si->provides,si->dependencies,
                      
si->shouldstart,si->shouldstop,si->requiredstart,si->requiredstop,si->description,
@@ -402,12 +398,14 @@
                /* todo error here */
                return False;
        }
+
        slprintf(keystring, sizeof(keystring)-1, "SVCCTL/SERVICE_INFO/%s", 
service_name);
        DEBUGADD(10, ("_svcctl_write_si_to_service_tdb: Key is  [%s]\n", 
keystring));
        kbuf.dsize = strlen(keystring)+1;
        kbuf.dptr = keystring;
        dbuf.dsize = len;
        dbuf.dptr = pbuf;
+
        return (tdb_store(stdb, kbuf, dbuf, TDB_REPLACE) == 0);
 }
 
@@ -426,7 +424,7 @@
        pstring external_service_list;
        pstring internal_service_list;
        Service_info si;
-       const Internal_service_description *isd_ptr;
+       const Internal_service_description *isd_ptr = NULL;
        /* svc_list = str_list_make( "etc/init.d/skeleton  etc/init.d/syslog", 
NULL ); */
        svc_list=(char **)lp_enable_svcctl(); 
 
@@ -475,8 +473,9 @@
        /* Get the INTERNAL services */
        
        pstrcpy(internal_service_list,"");
-       isd_ptr = ISD; 
 
+       /* isd_ptr = ISD;  */
+
        while (isd_ptr && (isd_ptr->filename)) {
                DEBUG(10,("Reading information on service 
%s\n",isd_ptr->filename));
                if (get_internal_service_data(isd_ptr,&si)){
@@ -496,4 +495,3 @@
 
        return True;
 }
-#endif

Reply via email to