2 * Unix SMB/CIFS implementation.
3 * NetApi Server Support
4 * Copyright (C) Guenther Deschner 2007
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.
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.
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/>.
22 #include "librpc/gen_ndr/libnetapi.h"
23 #include "lib/netapi/netapi.h"
24 #include "lib/netapi/netapi_private.h"
25 #include "lib/netapi/libnetapi.h"
26 #include "../librpc/gen_ndr/ndr_srvsvc_c.h"
27 #include "lib/smbconf/smbconf.h"
28 #include "lib/smbconf/smbconf_reg.h"
29 #include "libsmb/dsgetdcname.h"
31 /****************************************************************
32 ****************************************************************/
34 static WERROR
NetServerGetInfo_l_101(struct libnetapi_ctx
*ctx
,
37 const struct loadparm_substitution
*lp_sub
=
38 loadparm_s3_global_substitution();
39 struct SERVER_INFO_101 i
;
41 i
.sv101_platform_id
= PLATFORM_ID_NT
;
42 i
.sv101_name
= lp_netbios_name();
43 i
.sv101_version_major
= SAMBA_MAJOR_NBT_ANNOUNCE_VERSION
;
44 i
.sv101_version_minor
= SAMBA_MINOR_NBT_ANNOUNCE_VERSION
;
45 i
.sv101_type
= lp_default_server_announce();
46 i
.sv101_comment
= lp_server_string(ctx
, lp_sub
);
48 *buffer
= (uint8_t *)talloc_memdup(ctx
, &i
, sizeof(i
));
50 return WERR_NOT_ENOUGH_MEMORY
;
56 /****************************************************************
57 ****************************************************************/
59 static WERROR
NetServerGetInfo_l_1005(struct libnetapi_ctx
*ctx
,
62 const struct loadparm_substitution
*lp_sub
=
63 loadparm_s3_global_substitution();
64 struct SERVER_INFO_1005 info1005
;
66 info1005
.sv1005_comment
= lp_server_string(ctx
, lp_sub
);
67 *buffer
= (uint8_t *)talloc_memdup(ctx
, &info1005
, sizeof(info1005
));
69 return WERR_NOT_ENOUGH_MEMORY
;
75 /****************************************************************
76 ****************************************************************/
78 WERROR
NetServerGetInfo_l(struct libnetapi_ctx
*ctx
,
79 struct NetServerGetInfo
*r
)
81 switch (r
->in
.level
) {
83 return NetServerGetInfo_l_101(ctx
, r
->out
.buffer
);
85 return NetServerGetInfo_l_1005(ctx
, r
->out
.buffer
);
90 return WERR_INVALID_LEVEL
;
93 /****************************************************************
94 ****************************************************************/
96 static NTSTATUS
map_server_info_to_SERVER_INFO_buffer(TALLOC_CTX
*mem_ctx
,
98 union srvsvc_NetSrvInfo
*i
,
101 struct SERVER_INFO_100 i100
;
102 struct SERVER_INFO_101 i101
;
103 struct SERVER_INFO_102 i102
;
104 struct SERVER_INFO_402 i402
;
105 struct SERVER_INFO_403 i403
;
106 struct SERVER_INFO_502 i502
;
107 struct SERVER_INFO_503 i503
;
108 struct SERVER_INFO_599 i599
;
109 struct SERVER_INFO_1005 i1005
;
111 struct SERVER_INFO_1010 i1010
;
112 struct SERVER_INFO_1016 i1016
;
113 struct SERVER_INFO_1017 i1017
;
114 struct SERVER_INFO_1018 i1018
;
115 struct SERVER_INFO_1107 i1107
;
116 struct SERVER_INFO_1501 i1501
;
117 struct SERVER_INFO_1502 i1502
;
118 struct SERVER_INFO_1503 i1503
;
119 struct SERVER_INFO_1506 i1506
;
120 struct SERVER_INFO_1509 i1509
;
121 struct SERVER_INFO_1510 i1510
;
122 struct SERVER_INFO_1511 i1511
;
123 struct SERVER_INFO_1512 i1512
;
124 struct SERVER_INFO_1513 i1513
;
125 struct SERVER_INFO_1514 i1514
;
126 struct SERVER_INFO_1515 i1515
;
127 struct SERVER_INFO_1516 i1516
;
128 struct SERVER_INFO_1518 i1518
;
129 struct SERVER_INFO_1520 i1520
;
130 struct SERVER_INFO_1521 i1521
;
131 struct SERVER_INFO_1522 i1522
;
132 struct SERVER_INFO_1523 i1523
;
133 struct SERVER_INFO_1524 i1524
;
134 struct SERVER_INFO_1525 i1525
;
135 struct SERVER_INFO_1528 i1528
;
136 struct SERVER_INFO_1529 i1529
;
137 struct SERVER_INFO_1530 i1530
;
138 struct SERVER_INFO_1533 i1533
;
139 struct SERVER_INFO_1534 i1534
;
140 struct SERVER_INFO_1535 i1535
;
141 struct SERVER_INFO_1536 i1536
;
142 struct SERVER_INFO_1537 i1537
;
143 struct SERVER_INFO_1538 i1538
;
144 struct SERVER_INFO_1539 i1539
;
145 struct SERVER_INFO_1540 i1540
;
146 struct SERVER_INFO_1541 i1541
;
147 struct SERVER_INFO_1542 i1542
;
148 struct SERVER_INFO_1543 i1543
;
149 struct SERVER_INFO_1544 i1544
;
150 struct SERVER_INFO_1545 i1545
;
151 struct SERVER_INFO_1546 i1546
;
152 struct SERVER_INFO_1547 i1547
;
153 struct SERVER_INFO_1548 i1548
;
154 struct SERVER_INFO_1549 i1549
;
155 struct SERVER_INFO_1550 i1550
;
156 struct SERVER_INFO_1552 i1552
;
157 struct SERVER_INFO_1553 i1553
;
158 struct SERVER_INFO_1554 i1554
;
159 struct SERVER_INFO_1555 i1555
;
160 struct SERVER_INFO_1556 i1556
;
161 struct SERVER_INFO_1557 i1557
;
162 struct SERVER_INFO_1560 i1560
;
163 struct SERVER_INFO_1561 i1561
;
164 struct SERVER_INFO_1562 i1562
;
165 struct SERVER_INFO_1563 i1563
;
166 struct SERVER_INFO_1564 i1564
;
167 struct SERVER_INFO_1565 i1565
;
168 struct SERVER_INFO_1566 i1566
;
169 struct SERVER_INFO_1567 i1567
;
170 struct SERVER_INFO_1568 i1568
;
171 struct SERVER_INFO_1569 i1569
;
172 struct SERVER_INFO_1570 i1570
;
173 struct SERVER_INFO_1571 i1571
;
174 struct SERVER_INFO_1572 i1572
;
175 struct SERVER_INFO_1573 i1573
;
176 struct SERVER_INFO_1574 i1574
;
177 struct SERVER_INFO_1575 i1575
;
178 struct SERVER_INFO_1576 i1576
;
179 struct SERVER_INFO_1577 i1577
;
180 struct SERVER_INFO_1578 i1578
;
181 struct SERVER_INFO_1579 i1579
;
182 struct SERVER_INFO_1580 i1580
;
183 struct SERVER_INFO_1581 i1581
;
184 struct SERVER_INFO_1582 i1582
;
185 struct SERVER_INFO_1583 i1583
;
186 struct SERVER_INFO_1584 i1584
;
187 struct SERVER_INFO_1585 i1585
;
188 struct SERVER_INFO_1586 i1586
;
189 struct SERVER_INFO_1587 i1587
;
190 struct SERVER_INFO_1588 i1588
;
191 struct SERVER_INFO_1590 i1590
;
192 struct SERVER_INFO_1591 i1591
;
193 struct SERVER_INFO_1592 i1592
;
194 struct SERVER_INFO_1593 i1593
;
195 struct SERVER_INFO_1594 i1594
;
196 struct SERVER_INFO_1595 i1595
;
197 struct SERVER_INFO_1596 i1596
;
198 struct SERVER_INFO_1597 i1597
;
199 struct SERVER_INFO_1598 i1598
;
200 struct SERVER_INFO_1599 i1599
;
201 struct SERVER_INFO_1600 i1600
;
202 struct SERVER_INFO_1601 i1601
;
203 struct SERVER_INFO_1602 i1602
;
205 uint32_t num_info
= 0;
209 i100
.sv100_platform_id
= i
->info100
->platform_id
;
210 i100
.sv100_name
= talloc_strdup(mem_ctx
, i
->info100
->server_name
);
212 ADD_TO_ARRAY(mem_ctx
, struct SERVER_INFO_100
, i100
,
213 (struct SERVER_INFO_100
**)buffer
,
218 i101
.sv101_platform_id
= i
->info101
->platform_id
;
219 i101
.sv101_name
= talloc_strdup(mem_ctx
, i
->info101
->server_name
);
220 i101
.sv101_version_major
= i
->info101
->version_major
;
221 i101
.sv101_version_minor
= i
->info101
->version_minor
;
222 i101
.sv101_type
= i
->info101
->server_type
;
223 i101
.sv101_comment
= talloc_strdup(mem_ctx
, i
->info101
->comment
);
225 ADD_TO_ARRAY(mem_ctx
, struct SERVER_INFO_101
, i101
,
226 (struct SERVER_INFO_101
**)buffer
,
231 i102
.sv102_platform_id
= i
->info102
->platform_id
;
232 i102
.sv102_name
= talloc_strdup(mem_ctx
, i
->info102
->server_name
);
233 i102
.sv102_version_major
= i
->info102
->version_major
;
234 i102
.sv102_version_minor
= i
->info102
->version_minor
;
235 i102
.sv102_type
= i
->info102
->server_type
;
236 i102
.sv102_comment
= talloc_strdup(mem_ctx
, i
->info102
->comment
);
237 i102
.sv102_users
= i
->info102
->users
;
238 i102
.sv102_disc
= i
->info102
->disc
;
239 i102
.sv102_hidden
= i
->info102
->hidden
;
240 i102
.sv102_announce
= i
->info102
->announce
;
241 i102
.sv102_anndelta
= i
->info102
->anndelta
;
242 i102
.sv102_licenses
= i
->info102
->licenses
;
243 i102
.sv102_userpath
= talloc_strdup(mem_ctx
, i
->info102
->userpath
);
245 ADD_TO_ARRAY(mem_ctx
, struct SERVER_INFO_102
, i102
,
246 (struct SERVER_INFO_102
**)buffer
,
252 i402
.sv402_ulist_mtime
= i
->info402
->ulist_mtime
;
253 i402
.sv402_glist_mtime
= i
->info402
->glist_mtime
;
254 i402
.sv402_alist_mtime
= i
->info402
->alist_mtime
;
255 i402
.sv402_alerts
= talloc_strdup(mem_ctx
, i
->info402
->alerts
);
256 i402
.sv402_security
= i
->info402
->security
;
257 i402
.sv402_numadmin
= i
->info402
->numadmin
;
258 i402
.sv402_lanmask
= i
->info402
->lanmask
;
259 i402
.sv402_guestacct
= talloc_strdup(mem_ctx
, i
->info402
->guestaccount
);
260 i402
.sv402_chdevs
= i
->info402
->chdevs
;
261 i402
.sv402_chdevq
= i
->info402
->chdevqs
;
262 i402
.sv402_chdevjobs
= i
->info402
->chdevjobs
;
263 i402
.sv402_connections
= i
->info402
->connections
;
264 i402
.sv402_shares
= i
->info402
->shares
;
265 i402
.sv402_openfiles
= i
->info402
->openfiles
;
266 i402
.sv402_sessopens
= i
->info402
->sessopen
;
267 i402
.sv402_sessvcs
= i
->info402
->sesssvc
;
268 i402
.sv402_sessreqs
= i
->info402
->sessreqs
;
269 i402
.sv402_opensearch
= i
->info402
->opensearch
;
270 i402
.sv402_activelocks
= i
->info402
->activelocks
;
271 i402
.sv402_numreqbuf
= i
->info402
->numreqbufs
;
272 i402
.sv402_sizreqbuf
= i
->info402
->sizereqbufs
;
273 i402
.sv402_numbigbuf
= i
->info402
->numbigbufs
;
274 i402
.sv402_numfiletasks
= i
->info402
->numfiletasks
;
275 i402
.sv402_alertsched
= i
->info402
->alertsched
;
276 i402
.sv402_erroralert
= i
->info402
->erroralert
;
277 i402
.sv402_logonalert
= i
->info402
->logonalert
;
278 i402
.sv402_accessalert
= i
->info402
->accessalert
;
279 i402
.sv402_diskalert
= i
->info402
->diskalert
;
280 i402
.sv402_netioalert
= i
->info402
->netioalert
;
281 i402
.sv402_maxauditsz
= i
->info402
->maxaudits
;
282 i402
.sv402_srvheuristics
= i
->info402
->srvheuristics
;
284 ADD_TO_ARRAY(mem_ctx
, struct SERVER_INFO_402
, i402
,
285 (struct SERVER_INFO_402
**)buffer
,
291 i403
.sv403_ulist_mtime
= i
->info403
->ulist_mtime
;
292 i403
.sv403_glist_mtime
= i
->info403
->glist_mtime
;
293 i403
.sv403_alist_mtime
= i
->info403
->alist_mtime
;
294 i403
.sv403_alerts
= talloc_strdup(mem_ctx
, i
->info403
->alerts
);
295 i403
.sv403_security
= i
->info403
->security
;
296 i403
.sv403_numadmin
= i
->info403
->numadmin
;
297 i403
.sv403_lanmask
= i
->info403
->lanmask
;
298 i403
.sv403_guestacct
= talloc_strdup(mem_ctx
, i
->info403
->guestaccount
);
299 i403
.sv403_chdevs
= i
->info403
->chdevs
;
300 i403
.sv403_chdevq
= i
->info403
->chdevqs
;
301 i403
.sv403_chdevjobs
= i
->info403
->chdevjobs
;
302 i403
.sv403_connections
= i
->info403
->connections
;
303 i403
.sv403_shares
= i
->info403
->shares
;
304 i403
.sv403_openfiles
= i
->info403
->openfiles
;
305 i403
.sv403_sessopens
= i
->info403
->sessopen
;
306 i403
.sv403_sessvcs
= i
->info403
->sesssvc
;
307 i403
.sv403_sessreqs
= i
->info403
->sessreqs
;
308 i403
.sv403_opensearch
= i
->info403
->opensearch
;
309 i403
.sv403_activelocks
= i
->info403
->activelocks
;
310 i403
.sv403_numreqbuf
= i
->info403
->numreqbufs
;
311 i403
.sv403_sizreqbuf
= i
->info403
->sizereqbufs
;
312 i403
.sv403_numbigbuf
= i
->info403
->numbigbufs
;
313 i403
.sv403_numfiletasks
= i
->info403
->numfiletasks
;
314 i403
.sv403_alertsched
= i
->info403
->alertsched
;
315 i403
.sv403_erroralert
= i
->info403
->erroralert
;
316 i403
.sv403_logonalert
= i
->info403
->logonalert
;
317 i403
.sv403_accessalert
= i
->info403
->accessalert
;
318 i403
.sv403_diskalert
= i
->info403
->diskalert
;
319 i403
.sv403_netioalert
= i
->info403
->netioalert
;
320 i403
.sv403_maxauditsz
= i
->info403
->maxaudits
;
321 i403
.sv403_srvheuristics
= i
->info403
->srvheuristics
;
322 i403
.sv403_auditedevents
= i
->info403
->auditedevents
;
323 i403
.sv403_autoprofile
= i
->info403
->auditprofile
;
324 i403
.sv403_autopath
= talloc_strdup(mem_ctx
, i
->info403
->autopath
);
326 ADD_TO_ARRAY(mem_ctx
, struct SERVER_INFO_403
, i403
,
327 (struct SERVER_INFO_403
**)buffer
,
332 i502
.sv502_sessopens
= i
->info502
->sessopen
;
333 i502
.sv502_sessvcs
= i
->info502
->sesssvc
;
334 i502
.sv502_opensearch
= i
->info502
->opensearch
;
335 i502
.sv502_sizreqbuf
= i
->info502
->sizereqbufs
;
336 i502
.sv502_initworkitems
= i
->info502
->initworkitems
;
337 i502
.sv502_maxworkitems
= i
->info502
->maxworkitems
;
338 i502
.sv502_rawworkitems
= i
->info502
->rawworkitems
;
339 i502
.sv502_irpstacksize
= i
->info502
->irpstacksize
;
340 i502
.sv502_maxrawbuflen
= i
->info502
->maxrawbuflen
;
341 i502
.sv502_sessusers
= i
->info502
->sessusers
;
342 i502
.sv502_sessconns
= i
->info502
->sessconns
;
343 i502
.sv502_maxpagedmemoryusage
= i
->info502
->maxpagedmemoryusage
;
344 i502
.sv502_maxnonpagedmemoryusage
= i
->info502
->maxnonpagedmemoryusage
;
345 i502
.sv502_enablesoftcompat
= i
->info502
->enablesoftcompat
;
346 i502
.sv502_enableforcedlogoff
= i
->info502
->enableforcedlogoff
;
347 i502
.sv502_timesource
= i
->info502
->timesource
;
348 i502
.sv502_acceptdownlevelapis
= i
->info502
->acceptdownlevelapis
;
349 i502
.sv502_lmannounce
= i
->info502
->lmannounce
;
351 ADD_TO_ARRAY(mem_ctx
, struct SERVER_INFO_502
, i502
,
352 (struct SERVER_INFO_502
**)buffer
,
357 i503
.sv503_sessopens
= i
->info503
->sessopen
;
358 i503
.sv503_sessvcs
= i
->info503
->sesssvc
;
359 i503
.sv503_opensearch
= i
->info503
->opensearch
;
360 i503
.sv503_sizreqbuf
= i
->info503
->sizereqbufs
;
361 i503
.sv503_initworkitems
= i
->info503
->initworkitems
;
362 i503
.sv503_maxworkitems
= i
->info503
->maxworkitems
;
363 i503
.sv503_rawworkitems
= i
->info503
->rawworkitems
;
364 i503
.sv503_irpstacksize
= i
->info503
->irpstacksize
;
365 i503
.sv503_maxrawbuflen
= i
->info503
->maxrawbuflen
;
366 i503
.sv503_sessusers
= i
->info503
->sessusers
;
367 i503
.sv503_sessconns
= i
->info503
->sessconns
;
368 i503
.sv503_maxpagedmemoryusage
= i
->info503
->maxpagedmemoryusage
;
369 i503
.sv503_maxnonpagedmemoryusage
= i
->info503
->maxnonpagedmemoryusage
;
370 i503
.sv503_enablesoftcompat
= i
->info503
->enablesoftcompat
;
371 i503
.sv503_enableforcedlogoff
= i
->info503
->enableforcedlogoff
;
372 i503
.sv503_timesource
= i
->info503
->timesource
;
373 i503
.sv503_acceptdownlevelapis
= i
->info503
->acceptdownlevelapis
;
374 i503
.sv503_lmannounce
= i
->info503
->lmannounce
;
375 i503
.sv503_domain
= talloc_strdup(mem_ctx
, i
->info503
->domain
);
376 i503
.sv503_maxcopyreadlen
= i
->info503
->maxcopyreadlen
;
377 i503
.sv503_maxcopywritelen
= i
->info503
->maxcopywritelen
;
378 i503
.sv503_minkeepsearch
= i
->info503
->minkeepsearch
;
379 i503
.sv503_maxkeepsearch
= i
->info503
->maxkeepsearch
;
380 i503
.sv503_minkeepcomplsearch
= i
->info503
->minkeepcomplsearch
;
381 i503
.sv503_maxkeepcomplsearch
= i
->info503
->maxkeepcomplsearch
;
382 i503
.sv503_threadcountadd
= i
->info503
->threadcountadd
;
383 i503
.sv503_numblockthreads
= i
->info503
->numlockthreads
;
384 i503
.sv503_scavtimeout
= i
->info503
->scavtimeout
;
385 i503
.sv503_minrcvqueue
= i
->info503
->minrcvqueue
;
386 i503
.sv503_minfreeworkitems
= i
->info503
->minfreeworkitems
;
387 i503
.sv503_xactmemsize
= i
->info503
->xactmemsize
;
388 i503
.sv503_threadpriority
= i
->info503
->threadpriority
;
389 i503
.sv503_maxmpxct
= i
->info503
->maxmpxct
;
390 i503
.sv503_oplockbreakwait
= i
->info503
->oplockbreakwait
;
391 i503
.sv503_oplockbreakresponsewait
= i
->info503
->oplockbreakresponsewait
;
392 i503
.sv503_enableoplocks
= i
->info503
->enableoplocks
;
393 i503
.sv503_enableoplockforceclose
= i
->info503
->enableoplockforceclose
;
394 i503
.sv503_enablefcbopens
= i
->info503
->enablefcbopens
;
395 i503
.sv503_enableraw
= i
->info503
->enableraw
;
396 i503
.sv503_enablesharednetdrives
= i
->info503
->enablesharednetdrives
;
397 i503
.sv503_minfreeconnections
= i
->info503
->minfreeconnections
;
398 i503
.sv503_maxfreeconnections
= i
->info503
->maxfreeconnections
;
400 ADD_TO_ARRAY(mem_ctx
, struct SERVER_INFO_503
, i503
,
401 (struct SERVER_INFO_503
**)buffer
,
406 i599
.sv599_sessopens
= i
->info599
->sessopen
;
407 i599
.sv599_sessvcs
= i
->info599
->sesssvc
;
408 i599
.sv599_opensearch
= i
->info599
->opensearch
;
409 i599
.sv599_sizreqbuf
= i
->info599
->sizereqbufs
;
410 i599
.sv599_initworkitems
= i
->info599
->initworkitems
;
411 i599
.sv599_maxworkitems
= i
->info599
->maxworkitems
;
412 i599
.sv599_rawworkitems
= i
->info599
->rawworkitems
;
413 i599
.sv599_irpstacksize
= i
->info599
->irpstacksize
;
414 i599
.sv599_maxrawbuflen
= i
->info599
->maxrawbuflen
;
415 i599
.sv599_sessusers
= i
->info599
->sessusers
;
416 i599
.sv599_sessconns
= i
->info599
->sessconns
;
417 i599
.sv599_maxpagedmemoryusage
= i
->info599
->maxpagedmemoryusage
;
418 i599
.sv599_maxnonpagedmemoryusage
= i
->info599
->maxnonpagedmemoryusage
;
419 i599
.sv599_enablesoftcompat
= i
->info599
->enablesoftcompat
;
420 i599
.sv599_enableforcedlogoff
= i
->info599
->enableforcedlogoff
;
421 i599
.sv599_timesource
= i
->info599
->timesource
;
422 i599
.sv599_acceptdownlevelapis
= i
->info599
->acceptdownlevelapis
;
423 i599
.sv599_lmannounce
= i
->info599
->lmannounce
;
424 i599
.sv599_domain
= talloc_strdup(mem_ctx
, i
->info599
->domain
);
425 i599
.sv599_maxcopyreadlen
= i
->info599
->maxcopyreadlen
;
426 i599
.sv599_maxcopywritelen
= i
->info599
->maxcopywritelen
;
427 i599
.sv599_minkeepsearch
= i
->info599
->minkeepsearch
;
428 i599
.sv599_maxkeepsearch
= 0; /* ?? */
429 i599
.sv599_minkeepcomplsearch
= i
->info599
->minkeepcomplsearch
;
430 i599
.sv599_maxkeepcomplsearch
= i
->info599
->maxkeepcomplsearch
;
431 i599
.sv599_threadcountadd
= i
->info599
->threadcountadd
;
432 i599
.sv599_numblockthreads
= i
->info599
->numlockthreads
; /* typo ? */
433 i599
.sv599_scavtimeout
= i
->info599
->scavtimeout
;
434 i599
.sv599_minrcvqueue
= i
->info599
->minrcvqueue
;
435 i599
.sv599_minfreeworkitems
= i
->info599
->minfreeworkitems
;
436 i599
.sv599_xactmemsize
= i
->info599
->xactmemsize
;
437 i599
.sv599_threadpriority
= i
->info599
->threadpriority
;
438 i599
.sv599_maxmpxct
= i
->info599
->maxmpxct
;
439 i599
.sv599_oplockbreakwait
= i
->info599
->oplockbreakwait
;
440 i599
.sv599_oplockbreakresponsewait
= i
->info599
->oplockbreakresponsewait
;
441 i599
.sv599_enableoplocks
= i
->info599
->enableoplocks
;
442 i599
.sv599_enableoplockforceclose
= i
->info599
->enableoplockforceclose
;
443 i599
.sv599_enablefcbopens
= i
->info599
->enablefcbopens
;
444 i599
.sv599_enableraw
= i
->info599
->enableraw
;
445 i599
.sv599_enablesharednetdrives
= i
->info599
->enablesharednetdrives
;
446 i599
.sv599_minfreeconnections
= i
->info599
->minfreeconnections
;
447 i599
.sv599_maxfreeconnections
= i
->info599
->maxfreeconnections
;
448 i599
.sv599_initsesstable
= i
->info599
->initsesstable
;
449 i599
.sv599_initconntable
= i
->info599
->initconntable
;
450 i599
.sv599_initfiletable
= i
->info599
->initfiletable
;
451 i599
.sv599_initsearchtable
= i
->info599
->initsearchtable
;
452 i599
.sv599_alertschedule
= i
->info599
->alertsched
;
453 i599
.sv599_errorthreshold
= i
->info599
->errortreshold
;
454 i599
.sv599_networkerrorthreshold
= i
->info599
->networkerrortreshold
;
455 i599
.sv599_diskspacethreshold
= i
->info599
->diskspacetreshold
;
456 i599
.sv599_reserved
= i
->info599
->reserved
;
457 i599
.sv599_maxlinkdelay
= i
->info599
->maxlinkdelay
;
458 i599
.sv599_minlinkthroughput
= i
->info599
->minlinkthroughput
;
459 i599
.sv599_linkinfovalidtime
= i
->info599
->linkinfovalidtime
;
460 i599
.sv599_scavqosinfoupdatetime
= i
->info599
->scavqosinfoupdatetime
;
461 i599
.sv599_maxworkitemidletime
= i
->info599
->maxworkitemidletime
;
463 ADD_TO_ARRAY(mem_ctx
, struct SERVER_INFO_599
, i599
,
464 (struct SERVER_INFO_599
**)buffer
,
469 i1005
.sv1005_comment
= talloc_strdup(mem_ctx
, i
->info1005
->comment
);
471 ADD_TO_ARRAY(mem_ctx
, struct SERVER_INFO_1005
, i1005
,
472 (struct SERVER_INFO_1005
**)buffer
,
476 return NT_STATUS_NOT_SUPPORTED
;
482 /****************************************************************
483 ****************************************************************/
485 WERROR
NetServerGetInfo_r(struct libnetapi_ctx
*ctx
,
486 struct NetServerGetInfo
*r
)
490 union srvsvc_NetSrvInfo info
;
491 struct dcerpc_binding_handle
*b
;
493 if (!r
->out
.buffer
) {
494 return WERR_INVALID_PARAMETER
;
497 switch (r
->in
.level
) {
507 return WERR_INVALID_LEVEL
;
510 werr
= libnetapi_get_binding_handle(ctx
, r
->in
.server_name
,
513 if (!W_ERROR_IS_OK(werr
)) {
517 status
= dcerpc_srvsvc_NetSrvGetInfo(b
, talloc_tos(),
522 if (!NT_STATUS_IS_OK(status
)) {
523 werr
= ntstatus_to_werror(status
);
527 if (!W_ERROR_IS_OK(werr
)) {
531 status
= map_server_info_to_SERVER_INFO_buffer(ctx
, r
->in
.level
, &info
,
533 if (!NT_STATUS_IS_OK(status
)) {
534 werr
= ntstatus_to_werror(status
);
542 /****************************************************************
543 ****************************************************************/
545 static WERROR
NetServerSetInfo_l_1005(struct libnetapi_ctx
*ctx
,
546 struct NetServerSetInfo
*r
)
548 WERROR werr
= WERR_OK
;
550 struct smbconf_ctx
*conf_ctx
;
551 struct srvsvc_NetSrvInfo1005
*info1005
;
554 *r
->out
.parm_error
= 1005; /* sure here ? */
555 return WERR_INVALID_PARAMETER
;
558 info1005
= (struct srvsvc_NetSrvInfo1005
*)r
->in
.buffer
;
560 if (!info1005
->comment
) {
561 *r
->out
.parm_error
= 1005;
562 return WERR_INVALID_PARAMETER
;
565 if (!lp_config_backend_is_registry()) {
566 libnetapi_set_error_string(ctx
,
567 "Configuration manipulation requested but not "
568 "supported by backend");
569 return WERR_NOT_SUPPORTED
;
572 err
= smbconf_init_reg(ctx
, &conf_ctx
, NULL
);
573 if (!SBC_ERROR_IS_OK(err
)) {
574 libnetapi_set_error_string(ctx
,
575 "Could not initialize backend: %s",
576 sbcErrorString(err
));
577 werr
= WERR_SERVICE_DOES_NOT_EXIST
;
581 err
= smbconf_set_global_parameter(conf_ctx
, "server string",
583 if (!SBC_ERROR_IS_OK(err
)) {
584 libnetapi_set_error_string(ctx
,
585 "Could not set global parameter: %s",
586 sbcErrorString(err
));
587 werr
= WERR_SERVICE_DOES_NOT_EXIST
;
592 smbconf_shutdown(conf_ctx
);
596 /****************************************************************
597 ****************************************************************/
599 WERROR
NetServerSetInfo_l(struct libnetapi_ctx
*ctx
,
600 struct NetServerSetInfo
*r
)
602 switch (r
->in
.level
) {
604 return NetServerSetInfo_l_1005(ctx
, r
);
609 return WERR_INVALID_LEVEL
;
612 /****************************************************************
613 ****************************************************************/
615 WERROR
NetServerSetInfo_r(struct libnetapi_ctx
*ctx
,
616 struct NetServerSetInfo
*r
)
620 union srvsvc_NetSrvInfo info
;
621 struct dcerpc_binding_handle
*b
;
623 werr
= libnetapi_get_binding_handle(ctx
, r
->in
.server_name
,
626 if (!W_ERROR_IS_OK(werr
)) {
630 switch (r
->in
.level
) {
632 info
.info1005
= (struct srvsvc_NetSrvInfo1005
*)r
->in
.buffer
;
635 werr
= WERR_NOT_SUPPORTED
;
639 status
= dcerpc_srvsvc_NetSrvSetInfo(b
, talloc_tos(),
645 if (!NT_STATUS_IS_OK(status
)) {
646 werr
= ntstatus_to_werror(status
);
654 /****************************************************************
655 ****************************************************************/
657 WERROR
NetRemoteTOD_r(struct libnetapi_ctx
*ctx
,
658 struct NetRemoteTOD
*r
)
662 struct srvsvc_NetRemoteTODInfo
*info
= NULL
;
663 struct dcerpc_binding_handle
*b
;
665 werr
= libnetapi_get_binding_handle(ctx
, r
->in
.server_name
,
668 if (!W_ERROR_IS_OK(werr
)) {
672 status
= dcerpc_srvsvc_NetRemoteTOD(b
, talloc_tos(),
676 if (!NT_STATUS_IS_OK(status
)) {
677 werr
= ntstatus_to_werror(status
);
681 if (!W_ERROR_IS_OK(werr
)) {
685 *r
->out
.buffer
= (uint8_t *)talloc_memdup(ctx
, info
,
686 sizeof(struct srvsvc_NetRemoteTODInfo
));
687 W_ERROR_HAVE_NO_MEMORY(*r
->out
.buffer
);
693 /****************************************************************
694 ****************************************************************/
696 WERROR
NetRemoteTOD_l(struct libnetapi_ctx
*ctx
,
697 struct NetRemoteTOD
*r
)
699 LIBNETAPI_REDIRECT_TO_LOCALHOST(ctx
, r
, NetRemoteTOD
);