⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 conacct.c

📁 闻停开发板视频程序
💻 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 + -