2025-04-27 07:49:33 -04:00

434 lines
9.6 KiB
C++
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# include <windows.h>
# include <lm.h>
# include <stdio.h>
# include <stdlib.h>
# include <inetinfo.h>
# include <norminfo.h>
# include "apiutil.h"
# include "nntptype.h"
# include "nntpapi.h"
# include "resource.h"
DWORD
DelGroup(
LPWSTR Server,
DWORD InstanceId,
LPNNTP_NEWSGROUP_INFO newsgroup
);
DWORD
AddGroup(
LPWSTR Server,
DWORD InstanceId,
LPNNTP_NEWSGROUP_INFO newsgroup
);
DWORD
GetInformation(
LPWSTR Server,
DWORD InstanceId,
LPNNTP_NEWSGROUP_INFO *newsgroup
);
DWORD
SetInformation(
LPWSTR Server,
DWORD InstanceId,
LPNNTP_NEWSGROUP_INFO newsgroup
);
VOID
PrintInfo(
LPNNTP_NEWSGROUP_INFO newsgroup
);
char StringBuff[4096] ;
HINSTANCE hModuleInstance = 0 ;
void
usage( )
{
LoadString( hModuleInstance, IDS_HELPTEXT, StringBuff, sizeof( StringBuff ) ) ;
printf( StringBuff ) ;
#if 0
printf("rgroup\n");
printf("\t-t <operation>\n");
printf("\t\t a add\n");
printf("\t\t d del\n");
printf("\t\t g get\n");
printf("\t\t s set\n");
printf("\t-s <server>\n");
printf("\t-g <group>\n");
printf("\t-m <moderator\n>");
printf("\t-d <description>\n");
printf("\t-r == READ ONLY\n");
return;
#endif
}
LPWSTR RemServerW = (PWCH)NULL;
WCHAR ServerName[256];
void
__cdecl
main( int argc, char * argv[] )
{
NET_API_STATUS err;
NNTP_NEWSGROUP_INFO newsgroup ;
LPNNTP_NEWSGROUP_INFO lpnewsgroup ;
DWORD feedId = 0;
CHAR op = ' ';
INT cur = 1;
PCHAR x;
PCHAR p;
DWORD i;
PCHAR server;
BOOL isNull;
DWORD numNews = 1;
WCHAR tempNews[2048];
PCHAR newsgroupName = NULL;
WCHAR tempDescription[2048] ;
WCHAR tempModerator[2048] ;
CHAR tempPrettyname[70] ;
PCHAR Moderator = NULL ;
PCHAR Description = NULL ;
PCHAR Prettyname = NULL ;
BOOL ModeratorPresent = FALSE ;
BOOL DescriptionPresent = FALSE ;
BOOL PrettynamePresent = FALSE ;
BOOL ReadOnly = FALSE ;
BOOL NewsPresent = TRUE ;
BOOL ReadOnlyPresent = FALSE ;
DWORD InstanceId = 1;
BOOL fIsModerated = FALSE ;
if ( argc == 1 ) {
usage( );
return;
}
while ( cur < argc ) {
x=argv[cur++];
if ( *(x++) == '-' ) {
switch (*x) {
case 'g':
if ( cur >= argc ) {
usage( );
return;
}
for( i=0; argv[cur][i] != '\0' ; i++ ) {
tempNews[i] = (WCHAR)argv[cur][i] ;
}
tempNews[i] = '\0' ;
newsgroupName = (PCHAR)&tempNews[0] ;
NewsPresent = TRUE ;
break;
case 'm' :
if( cur >= argc ) {
usage( ) ;
return ;
}
for( i=0; argv[cur][i] != '\0' ; i++ ) {
tempModerator[i] = (WCHAR)argv[cur][i] ;
}
tempModerator[i] = L'\0' ;
Moderator = (PCHAR)&tempModerator[0] ;
ModeratorPresent = TRUE ;
break ;
case 'd':
if ( cur >= argc ) {
usage( );
return;
}
server = argv[cur++];
for (i=0; server[i] != '\0' ;i++ ) {
tempDescription[i] = (WCHAR)server[i] ;
}
tempDescription[i]=L'\0';
Description = (PCHAR)&tempDescription[0] ;
DescriptionPresent = TRUE ;
break;
case 'p':
if ( cur >= argc ) {
usage( );
return;
}
server = argv[cur++];
for (i=0; server[i] != '\0' ;i++ ) {
tempPrettyname[i] = server[i] ;
}
tempPrettyname[i]='\0';
Prettyname = (PCHAR)&tempPrettyname[0] ;
PrettynamePresent = TRUE ;
break;
case 'r':
ReadOnly = TRUE ;
ReadOnlyPresent = TRUE ;
break;
case 'u':
fIsModerated = TRUE ;
break;
case 'v':
if ( cur >= argc ) {
usage( );
return;
}
InstanceId = atoi(argv[cur++]);
break;
case 's':
if ( cur >= argc ) {
usage();
return;
}
server = argv[cur++];
for (i=0; server[i] != '\0' ;i++ ) {
ServerName[i] = (WCHAR)server[i];
}
ServerName[i]=L'\0';
RemServerW = ServerName;
break;
case 't':
if( cur >= argc ) {
usage() ;
return ;
}
op = *(argv[cur++]);
break;
default:
if( cur >= 1 ) {
LoadString( hModuleInstance, IDS_BAD_ARG, StringBuff, sizeof( StringBuff ) ) ;
printf( StringBuff ) ;
}
usage( );
return;
}
}
}
ZeroMemory(&newsgroup,sizeof(newsgroup));
if( newsgroupName == NULL ) {
LoadString( hModuleInstance, IDS_NEWSGROUPS_ERROR, StringBuff, sizeof( StringBuff ) ) ;
printf( StringBuff ) ;
usage() ;
return ;
}
newsgroup.Newsgroup = (PUCHAR)newsgroupName ;
newsgroup.cbNewsgroup = (wcslen( (LPWSTR)newsgroupName ) + 1 ) * sizeof(WCHAR) ;
if( Moderator ) {
newsgroup.Moderator = (PUCHAR)Moderator ;
newsgroup.cbModerator = (wcslen( (LPWSTR)Moderator ) + 1 ) * sizeof( WCHAR ) ;
}
if( Description ) {
newsgroup.Description = (PUCHAR)Description ;
newsgroup.cbDescription = (wcslen( (LPWSTR)Description ) + 1 ) * sizeof( WCHAR ) ;
}
if( Prettyname ) {
newsgroup.Prettyname = (PUCHAR)Prettyname ;
newsgroup.cbPrettyname = (lstrlen( Prettyname ) + 1 ) * sizeof( CHAR ) ;
}
newsgroup.ReadOnly = ReadOnly ;
newsgroup.fIsModerated = fIsModerated ;
switch (op) {
case 'a':
err = AddGroup( RemServerW,
InstanceId,
&newsgroup ) ;
break;
case 'd':
err = DelGroup(
RemServerW,
InstanceId,
&newsgroup
);
break;
case 's':
err = SetInformation(
RemServerW,
InstanceId,
&newsgroup
) ;
break ;
case 'g':
lpnewsgroup = &newsgroup ;
err = GetInformation(
RemServerW,
InstanceId,
&lpnewsgroup
);
break ;
default:
usage( );
}
return;
#if 0
free_buf:
//MIDL_user_free(feedInfo);
return;
#endif
} // main()
DWORD
GetInformation(
LPWSTR Server,
DWORD InstanceId,
LPNNTP_NEWSGROUP_INFO* newsgroup
)
{
DWORD err;
err = NntpGetNewsgroup(
Server,
InstanceId,
newsgroup
);
if ( err == NO_ERROR ) {
if( *newsgroup ) {
PrintInfo(*newsgroup);
} else {
printf( "newsgroup not found \n" ) ;
LoadString( hModuleInstance, IDS_NOT_FOUND, StringBuff, sizeof( StringBuff ) ) ;
printf( StringBuff ) ;
}
} else {
LoadString( hModuleInstance, IDS_RPC_ERROR, StringBuff, sizeof( StringBuff ) ) ;
printf( StringBuff, err ) ;
}
return err;
}
VOID
PrintInfo(
LPNNTP_NEWSGROUP_INFO newsgroup
)
{
PWCH p;
char ReadOnlyBuff[512] ;
if( newsgroup->ReadOnly ) {
LoadString( hModuleInstance, IDS_READONLY, ReadOnlyBuff, sizeof( ReadOnlyBuff ) ) ;
} else {
LoadString( hModuleInstance, IDS_READWRITE, ReadOnlyBuff, sizeof( ReadOnlyBuff ) ) ;
}
LoadString( hModuleInstance, IDS_DISPLAY, StringBuff, sizeof( StringBuff ) ) ;
printf( StringBuff, newsgroup->Newsgroup, ReadOnlyBuff,
newsgroup->Description, newsgroup->Moderator, newsgroup->Prettyname ) ;
}
DWORD
SetInformation(
LPWSTR Server,
DWORD InstanceId,
LPNNTP_NEWSGROUP_INFO newsgroup
)
{
DWORD err;
err = NntpSetNewsgroup(
Server,
InstanceId,
newsgroup
);
if( err != NO_ERROR ) {
LoadString( hModuleInstance, IDS_RPC_ERROR, StringBuff, sizeof( StringBuff ) ) ;
printf( StringBuff, err ) ;
}
return err;
}
DWORD
AddGroup(
LPWSTR Server,
DWORD InstanceId,
LPNNTP_NEWSGROUP_INFO newsgroup
)
{
DWORD err;
DWORD parm = 0;
printf( "Attempting to add group : \n" ) ;
PrintInfo( newsgroup ) ;
err = NntpCreateNewsgroup(
Server,
InstanceId,
newsgroup
);
if( err != NO_ERROR ) {
LoadString( hModuleInstance, IDS_RPC_ERROR, StringBuff, sizeof( StringBuff ) ) ;
printf( StringBuff, err ) ;
if ( err == ERROR_INVALID_PARAMETER ) {
LoadString( hModuleInstance, IDS_PARM_ERROR, StringBuff, sizeof( StringBuff ) ) ;
printf( StringBuff, parm ) ;
}
}
return err;
}
DWORD
DelGroup(
LPWSTR Server,
DWORD InstanceId,
LPNNTP_NEWSGROUP_INFO newsgroup
)
{
DWORD err;
err = NntpDeleteNewsgroup(
Server,
InstanceId,
newsgroup
);
if( err != NO_ERROR ) {
LoadString( hModuleInstance, IDS_RPC_ERROR, StringBuff, sizeof( StringBuff ) ) ;
printf( StringBuff, err ) ;
}
return err;
}