RIP BOOL. Convert BOOL -> bool. I found a few interesting
[tprouty/samba.git] / source3 / printing / printing.c
index 39efe19604e9cdc213b266a905b67e7e8c927e48..af87b8f2c293da3d862316d7b406cef52f9916b3 100644 (file)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,8 +16,7 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "includes.h"
@@ -29,7 +28,7 @@ extern struct current_user current_user;
 extern userdom_struct current_user_info;
 
 /* Current printer interface */
-static BOOL remove_from_jobs_changed(const char* sharename, uint32 jobid);
+static bool remove_from_jobs_changed(const char* sharename, uint32 jobid);
 
 /* 
    the printing backend revolves around a tdb database that stores the
@@ -76,7 +75,7 @@ uint16 pjobid_to_rap(const char* sharename, uint32 jobid)
        ZERO_STRUCT( jinfo );
        fstrcpy( jinfo.sharename, sharename );
        jinfo.jobid = jobid;
-       key.dptr = (char*)&jinfo;
+       key.dptr = (uint8 *)&jinfo;
        key.dsize = sizeof(jinfo);
 
        data = tdb_fetch(rap_tdb, key);
@@ -93,7 +92,7 @@ uint16 pjobid_to_rap(const char* sharename, uint32 jobid)
        if (rap_jobid == 0)
                rap_jobid = ++next_rap_jobid;
        SSVAL(buf,0,rap_jobid);
-       data.dptr = (char*)buf;
+       data.dptr = buf;
        data.dsize = sizeof(rap_jobid);
        tdb_store(rap_tdb, key, data, TDB_REPLACE);
        tdb_store(rap_tdb, data, key, TDB_REPLACE);
@@ -103,7 +102,7 @@ uint16 pjobid_to_rap(const char* sharename, uint32 jobid)
        return rap_jobid;
 }
 
-BOOL rap_to_pjobid(uint16 rap_jobid, fstring sharename, uint32 *pjobid)
+bool rap_to_pjobid(uint16 rap_jobid, fstring sharename, uint32 *pjobid)
 {
        TDB_DATA data, key;
        uint8 buf[2];
@@ -114,7 +113,7 @@ BOOL rap_to_pjobid(uint16 rap_jobid, fstring sharename, uint32 *pjobid)
                return False;
 
        SSVAL(buf,0,rap_jobid);
-       key.dptr = (char*)buf;
+       key.dptr = buf;
        key.dsize = sizeof(rap_jobid);
        data = tdb_fetch(rap_tdb, key);
        if ( data.dptr && data.dsize == sizeof(struct rap_jobid_key) ) 
@@ -149,7 +148,7 @@ static void rap_jobid_delete(const char* sharename, uint32 jobid)
        ZERO_STRUCT( jinfo );
        fstrcpy( jinfo.sharename, sharename );
        jinfo.jobid = jobid;
-       key.dptr = (char*)&jinfo;
+       key.dptr = (uint8 *)&jinfo;
        key.dsize = sizeof(jinfo);
 
        data = tdb_fetch(rap_tdb, key);
@@ -166,7 +165,7 @@ static void rap_jobid_delete(const char* sharename, uint32 jobid)
        rap_jobid = SVAL(data.dptr, 0);
        SAFE_FREE(data.dptr);
        SSVAL(buf,0,rap_jobid);
-       data.dptr = (char*)buf;
+       data.dptr = buf;
        data.dsize = sizeof(rap_jobid);
        tdb_delete(rap_tdb, key);
        tdb_delete(rap_tdb, data);
@@ -178,7 +177,7 @@ static int get_queue_status(const char* sharename, print_status_struct *);
  Initialise the printing backend. Called once at startup before the fork().
 ****************************************************************************/
 
-BOOL print_backend_init(void)
+bool print_backend_init(struct messaging_context *msg_ctx)
 {
        const char *sversion = "INFO/version";
        pstring printing_path;
@@ -215,7 +214,7 @@ BOOL print_backend_init(void)
        close_all_print_db(); /* Don't leave any open. */
 
        /* do NT print initialization... */
-       return nt_printing_init();
+       return nt_printing_init(msg_ctx);
 }
 
 /****************************************************************************
@@ -273,7 +272,7 @@ static TDB_DATA print_key(uint32 jobid)
        TDB_DATA ret;
 
        SIVAL(&j, 0, jobid);
-       ret.dptr = (char *)&j;
+       ret.dptr = (uint8 *)&j;
        ret.dsize = sizeof(j);
        return ret;
 }
@@ -282,7 +281,7 @@ static TDB_DATA print_key(uint32 jobid)
  unpack a pjob from a tdb buffer 
 ***********************************************************************/
  
-int unpack_pjob( char* buf, int buflen, struct printjob *pjob )
+int unpack_pjob( uint8 *buf, int buflen, struct printjob *pjob )
 {
        int     len = 0;
        int     used;
@@ -470,7 +469,7 @@ static uint32 map_to_spoolss_status(uint32 lpq_status)
 static void pjob_store_notify(const char* sharename, uint32 jobid, struct printjob *old_data,
                              struct printjob *new_data)
 {
-       BOOL new_job = False;
+       bool new_job = False;
 
        if (!old_data)
                new_job = True;
@@ -513,12 +512,12 @@ static void pjob_store_notify(const char* sharename, uint32 jobid, struct printj
  Store a job structure back to the database.
 ****************************************************************************/
 
-static BOOL pjob_store(const char* sharename, uint32 jobid, struct printjob *pjob)
+static bool pjob_store(const char* sharename, uint32 jobid, struct printjob *pjob)
 {
        TDB_DATA                old_data, new_data;
-       BOOL                    ret = False;
+       bool                    ret = False;
        struct tdb_print_db     *pdb = get_print_db_byname(sharename);
-       char                    *buf = NULL;
+       uint8                   *buf = NULL;
        int                     len, newlen, buflen;
        
 
@@ -554,7 +553,7 @@ static BOOL pjob_store(const char* sharename, uint32 jobid, struct printjob *pjo
                len += pack_devicemode(pjob->nt_devmode, buf+len, buflen-len);
        
                if (buflen != len) {
-                       buf = (char *)SMB_REALLOC(buf, len);
+                       buf = (uint8 *)SMB_REALLOC(buf, len);
                        if (!buf) {
                                DEBUG(0,("pjob_store: failed to enlarge buffer!\n"));
                                goto done;
@@ -867,8 +866,7 @@ static pid_t get_updating_pid(const char *sharename)
        if (!pdb)
                return (pid_t)-1;
        slprintf(keystr, sizeof(keystr)-1, "UPDATING/%s", sharename);
-       key.dptr = keystr;
-       key.dsize = strlen(keystr);
+       key = string_tdb_data(keystr);
 
        data = tdb_fetch(pdb->tdb, key);
        release_print_db(pdb);
@@ -891,7 +889,7 @@ static pid_t get_updating_pid(const char *sharename)
  in the tdb.
 ****************************************************************************/
 
-static void set_updating_pid(const fstring sharename, BOOL updating)
+static void set_updating_pid(const fstring sharename, bool updating)
 {
        fstring keystr;
        TDB_DATA key;
@@ -905,8 +903,7 @@ static void set_updating_pid(const fstring sharename, BOOL updating)
                return;
 
        slprintf(keystr, sizeof(keystr)-1, "UPDATING/%s", sharename);
-       key.dptr = keystr;
-       key.dsize = strlen(keystr);
+       key = string_tdb_data(keystr);
        
        DEBUG(5, ("set_updating_pid: %s updating lpq cache for print share %s\n", 
                updating ? "" : "not ",
@@ -919,7 +916,7 @@ static void set_updating_pid(const fstring sharename, BOOL updating)
        }
        
        SIVAL( buffer, 0, updating_pid);
-       data.dptr = (char *)buffer;
+       data.dptr = buffer;
        data.dsize = 4;         /* we always assume this is a 4 byte value */
 
        tdb_store(pdb->tdb, key, data, TDB_REPLACE);    
@@ -960,7 +957,7 @@ static void store_queue_struct(struct tdb_print_db *pdb, struct traverse_struct
        print_queue_struct *queue = pts->queue;
        size_t len;
        size_t i;
-       uint qcount;
+       unsigned int qcount;
 
        if (max_reported_jobs && (max_reported_jobs < pts->qcount))
                pts->qcount = max_reported_jobs;
@@ -986,7 +983,7 @@ static void store_queue_struct(struct tdb_print_db *pdb, struct traverse_struct
                                queue[i].fs_file);
        }
 
-       if ((data.dptr = (char *)SMB_MALLOC(data.dsize)) == NULL)
+       if ((data.dptr = (uint8 *)SMB_MALLOC(data.dsize)) == NULL)
                return;
 
         len = 0;
@@ -1045,12 +1042,12 @@ static void check_job_changed(const char *sharename, TDB_DATA data, uint32 jobid
  Check if the print queue has been updated recently enough.
 ****************************************************************************/
 
-static BOOL print_cache_expired(const char *sharename, BOOL check_pending)
+static bool print_cache_expired(const char *sharename, bool check_pending)
 {
        fstring key;
        time_t last_qscan_time, time_now = time(NULL);
        struct tdb_print_db *pdb = get_print_db_byname(sharename);
-       BOOL result = False;
+       bool result = False;
 
        if (!pdb)
                return False;
@@ -1233,11 +1230,10 @@ static void print_queue_update_internal( const char *sharename,
 
        /* store the new queue status structure */
        slprintf(keystr, sizeof(keystr)-1, "STATUS/%s", sharename);
-       key.dptr = keystr;
-       key.dsize = strlen(keystr);
+       key = string_tdb_data(keystr);
 
        status.qcount = qcount;
-       data.dptr = (char *)&status;
+       data.dptr = (uint8 *)&status;
        data.dsize = sizeof(status);
        tdb_store(pdb->tdb, key, data, TDB_REPLACE);    
 
@@ -1351,16 +1347,18 @@ static void print_queue_update_with_lock( const char *sharename,
 /****************************************************************************
 this is the receive function of the background lpq updater
 ****************************************************************************/
-static void print_queue_receive(int msg_type, struct process_id src,
-                               void *buf, size_t msglen,
-                               void *private_data)
+static void print_queue_receive(struct messaging_context *msg,
+                               void *private_data,
+                               uint32_t msg_type,
+                               struct server_id server_id,
+                               DATA_BLOB *data)
 {
        fstring sharename;
        pstring lpqcommand, lprmcommand;
        int printing_type;
        size_t len;
 
-       len = tdb_unpack( (char *)buf, msglen, "fdPP",
+       len = tdb_unpack( (uint8 *)data->data, data->length, "fdPP",
                sharename,
                &printing_type,
                lpqcommand,
@@ -1397,15 +1395,15 @@ void start_background_queue(void)
                /* Child. */
                DEBUG(5,("start_background_queue: background LPQ thread started\n"));
 
-               claim_connection( NULL, "smbd lpq backend", 0, False, 
+               claim_connection( NULL, "smbd lpq backend",
                        FLAG_MSG_GENERAL|FLAG_MSG_SMBD|FLAG_MSG_PRINT_GENERAL);
 
                if (!locking_init(0)) {
                        exit(1);
                }
 
-               message_register(MSG_PRINTER_UPDATE, print_queue_receive,
-                                NULL);
+               messaging_register(smbd_messaging_context(), NULL,
+                                  MSG_PRINTER_UPDATE, print_queue_receive);
                
                DEBUG(5,("start_background_queue: background LPQ thread waiting for messages\n"));
                while (1) {
@@ -1427,11 +1425,12 @@ void start_background_queue(void)
                        /* now check for messages */
                        
                        DEBUG(10,("start_background_queue: background LPQ thread got a message\n"));
-                       message_dispatch();
+                       message_dispatch(smbd_messaging_context());
 
                        /* process any pending print change notify messages */
 
-                       print_notify_send_messages(0);
+                       print_notify_send_messages(smbd_messaging_context(),
+                                                  0);
                }
        }
 }
@@ -1440,12 +1439,12 @@ void start_background_queue(void)
 update the internal database from the system print queue for a queue
 ****************************************************************************/
 
-static void print_queue_update(int snum, BOOL force)
+static void print_queue_update(int snum, bool force)
 {
        fstring key;
        fstring sharename;
        pstring lpqcommand, lprmcommand;
-       char *buffer = NULL;
+       uint8 *buffer = NULL;
        size_t len = 0;
        size_t newlen;
        struct tdb_print_db *pdb;
@@ -1499,7 +1498,7 @@ static void print_queue_update(int snum, BOOL force)
                lpqcommand, 
                lprmcommand );
 
-       buffer = SMB_XMALLOC_ARRAY( char, len );
+       buffer = SMB_XMALLOC_ARRAY( uint8, len );
 
        /* now pack the buffer */
        newlen = tdb_pack( buffer, len, "fdPP",
@@ -1537,8 +1536,9 @@ static void print_queue_update(int snum, BOOL force)
 
        /* finally send the message */
        
-       message_send_pid(pid_to_procid(background_lpq_updater_pid),
-                MSG_PRINTER_UPDATE, buffer, len, False);
+       messaging_send_buf(smbd_messaging_context(),
+                          pid_to_procid(background_lpq_updater_pid),
+                          MSG_PRINTER_UPDATE, (uint8 *)buffer, len);
 
        SAFE_FREE( buffer );
 
@@ -1550,14 +1550,14 @@ static void print_queue_update(int snum, BOOL force)
  updates only to interested smbd's. 
 ****************************************************************************/
 
-BOOL print_notify_register_pid(int snum)
+bool print_notify_register_pid(int snum)
 {
        TDB_DATA data;
        struct tdb_print_db *pdb = NULL;
        TDB_CONTEXT *tdb = NULL;
        const char *printername;
        uint32 mypid = (uint32)sys_getpid();
-       BOOL ret = False;
+       bool ret = False;
        size_t i;
 
        /* if (snum == -1), then the change notify request was
@@ -1607,7 +1607,7 @@ BOOL print_notify_register_pid(int snum)
 
        if (i == data.dsize) {
                /* We weren't in the list. Realloc. */
-               data.dptr = (char *)SMB_REALLOC(data.dptr, data.dsize + 8);
+               data.dptr = (uint8 *)SMB_REALLOC(data.dptr, data.dsize + 8);
                if (!data.dptr) {
                        DEBUG(0,("print_notify_register_pid: Relloc fail for printer %s\n",
                                                printername));
@@ -1641,7 +1641,7 @@ list for printer %s\n", printername));
  updates only to interested smbd's. 
 ****************************************************************************/
 
-BOOL print_notify_deregister_pid(int snum)
+bool print_notify_deregister_pid(int snum)
 {
        TDB_DATA data;
        struct tdb_print_db *pdb = NULL;
@@ -1649,7 +1649,7 @@ BOOL print_notify_deregister_pid(int snum)
        const char *printername;
        uint32 mypid = (uint32)sys_getpid();
        size_t i;
-       BOOL ret = False;
+       bool ret = False;
 
        /* if ( snum == -1 ), we are deregister a print server handle
           which means to deregister on all print queues */
@@ -1730,10 +1730,10 @@ list for printer %s\n", printername));
  Check if a jobid is valid. It is valid if it exists in the database.
 ****************************************************************************/
 
-BOOL print_job_exists(const char* sharename, uint32 jobid)
+bool print_job_exists(const char* sharename, uint32 jobid)
 {
        struct tdb_print_db *pdb = get_print_db_byname(sharename);
-       BOOL ret;
+       bool ret;
 
        if (!pdb)
                return False;
@@ -1792,7 +1792,7 @@ NT_DEVICEMODE *print_job_devmode(const char* sharename, uint32 jobid)
  Set the place in the queue for a job.
 ****************************************************************************/
 
-BOOL print_job_set_place(const char *sharename, uint32 jobid, int place)
+bool print_job_set_place(const char *sharename, uint32 jobid, int place)
 {
        DEBUG(2,("print_job_set_place not implemented yet\n"));
        return False;
@@ -1802,7 +1802,7 @@ BOOL print_job_set_place(const char *sharename, uint32 jobid, int place)
  Set the name of a job. Only possible for owner.
 ****************************************************************************/
 
-BOOL print_job_set_name(const char *sharename, uint32 jobid, char *name)
+bool print_job_set_name(const char *sharename, uint32 jobid, char *name)
 {
        struct printjob *pjob;
 
@@ -1818,13 +1818,13 @@ BOOL print_job_set_name(const char *sharename, uint32 jobid, char *name)
  Remove a jobid from the 'jobs changed' list.
 ***************************************************************************/
 
-static BOOL remove_from_jobs_changed(const char* sharename, uint32 jobid)
+static bool remove_from_jobs_changed(const char* sharename, uint32 jobid)
 {
        struct tdb_print_db *pdb = get_print_db_byname(sharename);
        TDB_DATA data, key;
        size_t job_count, i;
-       BOOL ret = False;
-       BOOL gotlock = False;
+       bool ret = False;
+       bool gotlock = False;
 
        if (!pdb) {
                return False;
@@ -1877,7 +1877,7 @@ static BOOL remove_from_jobs_changed(const char* sharename, uint32 jobid)
  Delete a print job - don't update queue.
 ****************************************************************************/
 
-static BOOL print_job_delete1(int snum, uint32 jobid)
+static bool print_job_delete1(int snum, uint32 jobid)
 {
        const char* sharename = lp_const_servicename(snum);
        struct printjob *pjob = print_job_find(sharename, jobid);
@@ -1940,7 +1940,7 @@ static BOOL print_job_delete1(int snum, uint32 jobid)
  Return true if the current user owns the print job.
 ****************************************************************************/
 
-static BOOL is_owner(struct current_user *user, const char *servicename,
+static bool is_owner(struct current_user *user, const char *servicename,
                     uint32 jobid)
 {
        struct printjob *pjob = print_job_find(servicename, jobid);
@@ -1960,11 +1960,11 @@ static BOOL is_owner(struct current_user *user, const char *servicename,
  Delete a print job.
 ****************************************************************************/
 
-BOOL print_job_delete(struct current_user *user, int snum, uint32 jobid, WERROR *errcode)
+bool print_job_delete(struct current_user *user, int snum, uint32 jobid, WERROR *errcode)
 {
        const char* sharename = lp_const_servicename( snum );
        struct printjob *pjob;
-       BOOL    owner;
+       bool    owner;
        char    *fname;
 
        *errcode = WERR_OK;
@@ -2027,7 +2027,7 @@ pause, or resume print job. User name: %s. Printer name: %s.",
  Pause a job.
 ****************************************************************************/
 
-BOOL print_job_pause(struct current_user *user, int snum, uint32 jobid, WERROR *errcode)
+bool print_job_pause(struct current_user *user, int snum, uint32 jobid, WERROR *errcode)
 {
        const char* sharename = lp_const_servicename(snum);
        struct printjob *pjob;
@@ -2087,7 +2087,7 @@ pause, or resume print job. User name: %s. Printer name: %s.",
  Resume a job.
 ****************************************************************************/
 
-BOOL print_job_resume(struct current_user *user, int snum, uint32 jobid, WERROR *errcode)
+bool print_job_resume(struct current_user *user, int snum, uint32 jobid, WERROR *errcode)
 {
        const char *sharename = lp_const_servicename(snum);
        struct printjob *pjob;
@@ -2230,7 +2230,7 @@ int print_queue_length(int snum, print_status_struct *pstatus)
  Allocate a jobid. Hold the lock for as short a time as possible.
 ***************************************************************************/
 
-static BOOL allocate_print_jobid(struct tdb_print_db *pdb, int snum, const char *sharename, uint32 *pjobid)
+static bool allocate_print_jobid(struct tdb_print_db *pdb, int snum, const char *sharename, uint32 *pjobid)
 {
        int i;
        uint32 jobid;
@@ -2296,13 +2296,13 @@ static BOOL allocate_print_jobid(struct tdb_print_db *pdb, int snum, const char
  Append a jobid to the 'jobs changed' list.
 ***************************************************************************/
 
-static BOOL add_to_jobs_changed(struct tdb_print_db *pdb, uint32 jobid)
+static bool add_to_jobs_changed(struct tdb_print_db *pdb, uint32 jobid)
 {
        TDB_DATA data;
        uint32 store_jobid;
 
        SIVAL(&store_jobid, 0, jobid);
-       data.dptr = (char *)&store_jobid;
+       data.dptr = (uint8 *)&store_jobid;
        data.dsize = 4;
 
        DEBUG(10,("add_to_jobs_changed: Added jobid %u\n", (unsigned int)jobid ));
@@ -2473,7 +2473,7 @@ void print_job_endpage(int snum, uint32 jobid)
  error.
 ****************************************************************************/
 
-BOOL print_job_end(int snum, uint32 jobid, enum file_close_type close_type)
+bool print_job_end(int snum, uint32 jobid, enum file_close_type close_type)
 {
        const char* sharename = lp_const_servicename(snum);
        struct printjob *pjob;
@@ -2550,7 +2550,7 @@ fail:
  Get a snapshot of jobs in the system without traversing.
 ****************************************************************************/
 
-static BOOL get_stored_queue_info(struct tdb_print_db *pdb, int snum, int *pcount, print_queue_struct **ppqueue)
+static bool get_stored_queue_info(struct tdb_print_db *pdb, int snum, int *pcount, print_queue_struct **ppqueue)
 {
        TDB_DATA data, cgdata;
        print_queue_struct *queue = NULL;
@@ -2560,7 +2560,7 @@ static BOOL get_stored_queue_info(struct tdb_print_db *pdb, int snum, int *pcoun
        size_t len = 0;
        uint32 i;
        int max_reported_jobs = lp_max_reported_jobs(snum);
-       BOOL ret = False;
+       bool ret = False;
        const char* sharename = lp_servicename(snum);
 
        /* make sure the database is up to date */
@@ -2701,8 +2701,8 @@ int print_queue_status(int snum,
 
        ZERO_STRUCTP(status);
        slprintf(keystr, sizeof(keystr)-1, "STATUS/%s", sharename);
-       key.dptr = keystr;
-       key.dsize = strlen(keystr);
+       key = string_tdb_data(keystr);
+
        data = tdb_fetch(pdb->tdb, key);
        if (data.dptr) {
                if (data.dsize == sizeof(*status)) {
@@ -2731,7 +2731,7 @@ int print_queue_status(int snum,
  Pause a queue.
 ****************************************************************************/
 
-BOOL print_queue_pause(struct current_user *user, int snum, WERROR *errcode)
+bool print_queue_pause(struct current_user *user, int snum, WERROR *errcode)
 {
        int ret;
        struct printif *current_printif = get_printer_fns( snum );
@@ -2767,7 +2767,7 @@ BOOL print_queue_pause(struct current_user *user, int snum, WERROR *errcode)
  Resume a queue.
 ****************************************************************************/
 
-BOOL print_queue_resume(struct current_user *user, int snum, WERROR *errcode)
+bool print_queue_resume(struct current_user *user, int snum, WERROR *errcode)
 {
        int ret;
        struct printif *current_printif = get_printer_fns( snum );
@@ -2803,12 +2803,12 @@ BOOL print_queue_resume(struct current_user *user, int snum, WERROR *errcode)
  Purge a queue - implemented by deleting all jobs that we can delete.
 ****************************************************************************/
 
-BOOL print_queue_purge(struct current_user *user, int snum, WERROR *errcode)
+bool print_queue_purge(struct current_user *user, int snum, WERROR *errcode)
 {
        print_queue_struct *queue;
        print_status_struct status;
        int njobs, i;
-       BOOL can_job_admin;
+       bool can_job_admin;
 
        /* Force and update so the count is accurate (i.e. not a cached count) */
        print_queue_update(snum, True);
@@ -2820,7 +2820,7 @@ BOOL print_queue_purge(struct current_user *user, int snum, WERROR *errcode)
                become_root();
 
        for (i=0;i<njobs;i++) {
-               BOOL owner = is_owner(user, lp_const_servicename(snum), queue[i].job);
+               bool owner = is_owner(user, lp_const_servicename(snum), queue[i].job);
 
                if (owner || can_job_admin) {
                        print_job_delete1(snum, queue[i].job);