📄 conacct.c
字号:
//--------------------------------------------------------------------------
// IP Stack Console Demonstration Program
//--------------------------------------------------------------------------
// ConAcct.c
//
// Basic Console Functions
// ConCmdAcct - Account Command
//
// Author: Michael A. Denio
// Copyright 1999 by Texas Instruments Inc.
//-------------------------------------------------------------------------
#include <netmain.h>
#include <_stack.h>
#include "console.h"
static void AcctDump();
static HANDLE AcctFind( char *User );
static char *AcctErr = "\nError in command line. Type 'acct' for help\n";
//-------------------------------------------------------------------------
// ConCmdAcct()
//
// Function to print, add, and remove accounts
//-------------------------------------------------------------------------
void ConCmdAcct( int ntok, char *tok1, char *tok2, char *tok3, char *tok4 )
{
CI_ACCT CA;
HANDLE hAcct;
char c;
int rc;
// Check for 'acct print'
if( ntok == 1 && !stricmp( tok1, "print" ) )
AcctDump();
// Check for 'acct add name pswd 1234'
else if( ntok == 4 && !stricmp( tok1, "add" ) )
{
if( strlen( tok2 ) >= CFG_ACCTSTR_MAX ||
strlen( tok3 ) >= CFG_ACCTSTR_MAX )
{
ConPrintf("Name or password too long, %d character max\n\n",
CFG_ACCTSTR_MAX-1);
return;
}
hAcct = AcctFind( tok2 );
if( hAcct )
{
ConPrintf("Account exits - remove old account first\n\n");
CfgEntryDeRef( hAcct );
return;
}
strcpy( CA.Username, tok2 );
strcpy( CA.Password, tok3 );
CA.Flags = 0;
while( c = *tok4++ )
{
if( c < '1' || c > '4' )
{
ConPrintf("Permissions must use chars '1' to '4'\n\n");
return;
}
c -= '1';
CA.Flags |= CFG_ACCTFLG_CH1<<c;
}
// Add it to the configuration
rc = CfgAddEntry( 0, CFGTAG_ACCT, CFGITEM_ACCT_SYSTEM,
CFG_ADDMODE_NOSAVE, sizeof(CI_ACCT),
(UINT8 *)&CA, 0 );
if( rc < 0 )
ConPrintf("Error adding account\n\n");
else
ConPrintf("Account added\n\n");
}
// Check for 'acct delete name'
else if( ntok == 2 && !stricmp( tok1, "delete" ) )
{
hAcct = AcctFind( tok2 );
if( !hAcct )
ConPrintf("Account not found\n\n");
else
{
CfgRemoveEntry( 0, hAcct );
ConPrintf("Account removed\n\n");
}
}
else if( ntok == 0 )
{
ConPrintf("\n[Acct Command]\n");
ConPrintf("\nCalled to print, add, or delete PPP/EFS user accounts.\n\n");
ConPrintf("acct print - List all accounts\n");
ConPrintf("acct add user pswd 1234 - Create account with channel permisions\n");
ConPrintf("acct delete user - Delete gateway route\n\n");
}
else
ConPrintf(AcctErr);
}
static void AcctDump()
{
CI_ACCT CA;
uint index,i;
int rc;
index = 1;
ConPrintf("\nUsername Password Channels (Realms)\n");
ConPrintf("---------------- ---------------- -----------------\n");
while(1)
{
rc = CfgGetImmediate( 0, CFGTAG_ACCT, CFGITEM_ACCT_SYSTEM,
index, sizeof(CA), (UINT8 *)&CA );
if( !rc )
break;
ConPrintf("%-16s %-16s ",CA.Username,CA.Password);
for( i=0; i<4; i++ )
if( CA.Flags & (CFG_ACCTFLG_CH1<<i) )
ConPrintf("R%d ",i+1);
ConPrintf("\n");
index++;
}
ConPrintf("\n");
}
static HANDLE AcctFind( char *User )
{
HANDLE hAcct;
CI_ACCT CA;
int rc;
int size;
rc = CfgGetEntry( 0, CFGTAG_ACCT, CFGITEM_ACCT_SYSTEM, 1, &hAcct );
if( rc <= 0 )
return(0);
while(1)
{
size = sizeof(CA);
rc = CfgEntryGetData( hAcct, &size, (UINT8 *)&CA );
if( rc <= 0 )
{
CfgEntryDeRef( hAcct );
return(0);
}
if( !strcmp( User, CA.Username ) )
return( hAcct );
rc = CfgGetNextEntry( 0, hAcct, &hAcct );
if( rc <= 0 )
return(0);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -