2004-07-12 16:35:48 +00:00
/*
Unix SMB / CIFS implementation .
RAP handlers
Copyright ( C ) Volker Lendecke 2004
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
2007-07-10 02:07:03 +00:00
the Free Software Foundation ; either version 3 of the License , or
2004-07-12 16:35:48 +00:00
( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
You should have received a copy of the GNU General Public License
2007-07-10 02:07:03 +00:00
along with this program . If not , see < http : //www.gnu.org/licenses/>.
2004-07-12 16:35:48 +00:00
*/
# include "includes.h"
2006-07-23 18:43:07 +00:00
# include "param/share.h"
2010-04-26 15:41:17 +02:00
# include "../librpc/gen_ndr/rap.h"
2009-01-29 18:39:30 -05:00
# include "libcli/raw/interfaces.h"
2006-03-16 00:23:11 +00:00
# include "librpc/gen_ndr/srvsvc.h"
2010-10-30 11:33:53 +11:00
# include "librpc/gen_ndr/dcerpc.h"
2006-03-07 11:07:23 +00:00
# include "rpc_server/common/common.h"
2010-10-21 17:12:31 +11:00
# include "rpc_server/common/share.h"
2007-12-10 18:41:55 +01:00
# include "param/param.h"
2008-10-20 18:59:51 +02:00
# include "ntvfs/ipc/ipc.h"
# include "ntvfs/ipc/proto.h"
2004-07-12 16:35:48 +00:00
/* At this moment these are just dummy functions, but you might get the
* idea . */
2006-03-10 14:31:17 +00:00
NTSTATUS rap_netshareenum ( TALLOC_CTX * mem_ctx ,
2008-12-29 20:24:57 +01:00
struct tevent_context * event_ctx ,
2008-01-05 19:03:43 -06:00
struct loadparm_context * lp_ctx ,
2004-07-12 16:35:48 +00:00
struct rap_NetShareEnum * r )
{
2006-07-23 18:43:07 +00:00
NTSTATUS nterr ;
const char * * snames ;
struct share_context * sctx ;
struct share_config * scfg ;
int i , j , count ;
2004-07-12 16:35:48 +00:00
r - > out . status = 0 ;
2006-07-23 18:43:07 +00:00
r - > out . available = 0 ;
r - > out . info = NULL ;
2021-03-25 11:50:14 +13:00
nterr = share_get_context ( mem_ctx , lp_ctx , & sctx ) ;
2006-07-23 18:43:07 +00:00
if ( ! NT_STATUS_IS_OK ( nterr ) ) {
return nterr ;
}
nterr = share_list_all ( mem_ctx , sctx , & count , & snames ) ;
if ( ! NT_STATUS_IS_OK ( nterr ) ) {
return nterr ;
}
r - > out . available = count ;
2006-03-10 14:31:17 +00:00
r - > out . info = talloc_array ( mem_ctx ,
2010-04-26 22:06:47 +02:00
union rap_share_info , r - > out . available ) ;
2004-07-12 16:35:48 +00:00
2006-07-23 18:43:07 +00:00
for ( i = 0 , j = 0 ; i < r - > out . available ; i + + ) {
2018-05-15 17:55:22 +02:00
size_t sname_len ;
2006-07-23 18:43:07 +00:00
if ( ! NT_STATUS_IS_OK ( share_get_config ( mem_ctx , sctx , snames [ i ] , & scfg ) ) ) {
DEBUG ( 3 , ( " WARNING: Service [%s] disappeared after enumeration! \n " , snames [ i ] ) ) ;
continue ;
}
2018-05-15 17:55:22 +02:00
/* Make sure we have NUL-termination */
sname_len = MIN ( strlen ( snames [ i ] ) ,
sizeof ( r - > out . info [ j ] . info1 . share_name ) ) ;
strlcpy ( ( char * ) r - > out . info [ j ] . info1 . share_name ,
2006-07-23 18:43:07 +00:00
snames [ i ] ,
2018-05-15 17:55:22 +02:00
sname_len ) ;
2010-04-26 22:06:47 +02:00
r - > out . info [ i ] . info1 . reserved1 = 0 ;
r - > out . info [ i ] . info1 . share_type = dcesrv_common_get_share_type ( mem_ctx , NULL , scfg ) ;
2014-01-17 10:16:12 +13:00
r - > out . info [ i ] . info1 . comment = share_string_option ( mem_ctx , scfg , SHARE_COMMENT , " " ) ;
2006-07-23 18:43:07 +00:00
talloc_free ( scfg ) ;
j + + ;
2004-12-19 03:31:57 +00:00
}
2006-07-23 18:43:07 +00:00
r - > out . available = j ;
2004-07-12 16:35:48 +00:00
return NT_STATUS_OK ;
}
2006-03-10 14:31:17 +00:00
NTSTATUS rap_netserverenum2 ( TALLOC_CTX * mem_ctx ,
2008-01-05 19:03:43 -06:00
struct loadparm_context * lp_ctx ,
2006-03-10 14:31:17 +00:00
struct rap_NetServerEnum2 * r )
2004-07-12 16:35:48 +00:00
{
r - > out . status = 0 ;
r - > out . available = 0 ;
return NT_STATUS_OK ;
}