s3-spoolss: add and use spoolss_printerinfo2_to_setprinterinfo2().
[vlendec/samba-autobuild/.git] / source3 / rpc_client / init_spoolss.c
1 /*
2  *  Unix SMB/CIFS implementation.
3  *  RPC Pipe client / server routines
4  *  Copyright (C) Guenther Deschner                  2009.
5  *
6  *  This program is free software; you can redistribute it and/or modify
7  *  it under the terms of the GNU General Public License as published by
8  *  the Free Software Foundation; either version 3 of the License, or
9  *  (at your option) any later version.
10  *
11  *  This program is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *  GNU General Public License for more details.
15  *
16  *  You should have received a copy of the GNU General Public License
17  *  along with this program; if not, see <http://www.gnu.org/licenses/>.
18  */
19
20 #include "includes.h"
21 #include "rpc_client/init_spoolss.h"
22 #include "../librpc/gen_ndr/ndr_spoolss.h"
23
24 /*******************************************************************
25 ********************************************************************/
26
27 bool init_systemtime(struct spoolss_Time *r,
28                      struct tm *unixtime)
29 {
30         if (!r || !unixtime) {
31                 return false;
32         }
33
34         r->year         = unixtime->tm_year+1900;
35         r->month        = unixtime->tm_mon+1;
36         r->day_of_week  = unixtime->tm_wday;
37         r->day          = unixtime->tm_mday;
38         r->hour         = unixtime->tm_hour;
39         r->minute       = unixtime->tm_min;
40         r->second       = unixtime->tm_sec;
41         r->millisecond  = 0;
42
43         return true;
44 }
45
46 time_t spoolss_Time_to_time_t(const struct spoolss_Time *r)
47 {
48         struct tm unixtime;
49
50         unixtime.tm_year        = r->year - 1900;
51         unixtime.tm_mon         = r->month - 1;
52         unixtime.tm_wday        = r->day_of_week;
53         unixtime.tm_mday        = r->day;
54         unixtime.tm_hour        = r->hour;
55         unixtime.tm_min         = r->minute;
56         unixtime.tm_sec         = r->second;
57
58         return mktime(&unixtime);
59 }
60
61 /*******************************************************************
62  ********************************************************************/
63
64 WERROR pull_spoolss_PrinterData(TALLOC_CTX *mem_ctx,
65                                 const DATA_BLOB *blob,
66                                 union spoolss_PrinterData *data,
67                                 enum winreg_Type type)
68 {
69         enum ndr_err_code ndr_err;
70         ndr_err = ndr_pull_union_blob(blob, mem_ctx, data, type,
71                         (ndr_pull_flags_fn_t)ndr_pull_spoolss_PrinterData);
72         if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
73                 return WERR_GENERAL_FAILURE;
74         }
75         return WERR_OK;
76 }
77
78 /*******************************************************************
79  ********************************************************************/
80
81 WERROR push_spoolss_PrinterData(TALLOC_CTX *mem_ctx, DATA_BLOB *blob,
82                                 enum winreg_Type type,
83                                 union spoolss_PrinterData *data)
84 {
85         enum ndr_err_code ndr_err;
86         ndr_err = ndr_push_union_blob(blob, mem_ctx, data, type,
87                         (ndr_push_flags_fn_t)ndr_push_spoolss_PrinterData);
88         if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
89                 return WERR_GENERAL_FAILURE;
90         }
91         return WERR_OK;
92 }
93
94 /*******************************************************************
95  ********************************************************************/
96
97 void spoolss_printerinfo2_to_setprinterinfo2(const struct spoolss_PrinterInfo2 *i,
98                                              struct spoolss_SetPrinterInfo2 *s)
99 {
100         s->servername           = i->servername;
101         s->printername          = i->printername;
102         s->sharename            = i->sharename;
103         s->portname             = i->portname;
104         s->drivername           = i->drivername;
105         s->comment              = i->comment;
106         s->location             = i->location;
107         s->devmode_ptr          = 0;
108         s->sepfile              = i->sepfile;
109         s->printprocessor       = i->printprocessor;
110         s->datatype             = i->datatype;
111         s->parameters           = i->parameters;
112         s->secdesc_ptr          = 0;
113         s->attributes           = i->attributes;
114         s->priority             = i->priority;
115         s->defaultpriority      = i->defaultpriority;
116         s->starttime            = i->starttime;
117         s->untiltime            = i->untiltime;
118         s->status               = i->status;
119         s->cjobs                = i->cjobs;
120         s->averageppm           = i->averageppm;
121 }