<html>#include <stdio.h>
#include <ctype.h>

char xlat[] = {
        
0x640x730x660x640x3b0x6b0x660x6f,
        
0x410x2c0x2e0x690x790x650x770x72,
        
0x6b0x6c0x640x4a0x4b0x440x480x53
        
0x550x42 
};

char pw_str1[] = "password 7 ";
char pw_str2[] = "enable-password 7 ";

char *pname;

cdecrypt(enc_pwdec_pw)
char *enc_pw;
char *dec_pw;
{
        
unsigned int seedival 0;

        if(
strlen(enc_pw) & 1)
                return(-
1);

        
seed = (enc_pw[0] - '0') * 10 enc_pw[1] - '0';

        if (
seed 15 || !isdigit(enc_pw[0]) || !isdigit(enc_pw[1]))
                return(-
1);

        for (
<= strlen(enc_pw); i++) {
                if(
!=&& !(1)) {
                        
dec_pw[2] = val xlat[seed++];
                        
val 0;
                }

                
val *= 16;

                if(
isdigit(enc_pw[i] = toupper(enc_pw[i]))) {
                        
val += enc_pw[i] - '0';
                        continue;
                }

                if(
enc_pw[i] >= 'A' && enc_pw[i] <= 'F') {
                        
val += enc_pw[i] - 'A' 10;
                        continue;
                }

                if(
strlen(enc_pw) != i)
                        return(-
1);
        }

        
dec_pw[++2] = 0;

        return(
0);
}

usage()
{
        
fprintf(stdout"Usage: %s -p <encrypted password>\n"pname);
        
fprintf(stdout"       %s <router config file> <output file>\n"pname);

        return(
0);
}

main(argc,argv)
int argc;
char **argv;

{
        
FILE *in stdin, *out stdout;
        
char line[257];
        
char passwd[65];
        
unsigned int ipw_pos;

        
pname argv[0];

        if(
argc 1)
        {
                if(
argc 3) {
                        
usage();
                        exit(
1);
                }

                if(
argv[1][0] == '-')
                {
                        switch(
argv[1][1]) {
                                case 
'h':
                                
usage();
                                break;

                                case 
'p':
                                if(
cdecrypt(argv[2], passwd)) {
                                        
fprintf(stderr"Error.\n");
                                        exit(
1);
                                }
                                
fprintf(stdout"password: %s\n"passwd);
                                break;

                                default:
                                
fprintf(stderr"%s: unknow option."pname);
                        }

                        return(
0);
                }

                if((
in fopen(argv[1], "rt")) == NULL)
                        exit(
1);
                if(
argc 2)
                        if((
out fopen(argv[2], "wt")) == NULL)
                                exit(
1);
        }

        while(
1) {
                for(
0256i++) {
                        if((
line[i] = fgetc(in)) == EOF) {
                                if(
i)
                                        break;

                                
fclose(in);
                                
fclose(out);
                                return(
0);
                        }
                        if(
line[i] == '\r')
                                
i--;

                        if(
line[i] == '\n')
                                break;
                }
                
pw_pos 0;
                
line[i] = 0;

                if(!
strncmp(linepw_str1strlen(pw_str1)))
                        
pw_pos strlen(pw_str1);

                if(!
strncmp(linepw_str2strlen(pw_str2)))
                        
pw_pos strlen(pw_str2);

                if(!
pw_pos) {
                        
fprintf(stdout"%s\n"line);
                        continue;
                }

                if(
cdecrypt(&line[pw_pos], passwd)) {
                        
fprintf(stderr"Error.\n");
                        exit(
1);
                }
                else {
                        if(
pw_pos == strlen(pw_str1))
                                
fprintf(out"%s"pw_str1);
                        else
                                
fprintf(out"%s"pw_str2);

                        
fprintf(out"%s\n"passwd);
                }
        }

}