14 нояб. 2012 г.

Прием почты как с почтового сервера, так и с СВК - по очереди

Результат падает в 1 ящик. Получить почту
c:\usr\bin\fetchmail.exe -v -f /usr/etc/fetchmailrc.cb >>c:\usr\log\fetchmail.log
rasdial svk chan_** **
c:\usr\bin\tst10.exe /m /r:c:\usr\etc\svktelnet.scr /o:c:\usr\log\auth.log
c:\usr\bin\fetchmail.exe -v -f /usr/etc/fetchmailrc.cb.svk >>c:\usr\log\fetchmail.svk.log
c:\usr\bin\tst10.exe /m /r:c:\usr\etc\svktelnet.scr /o:c:\usr\log\unauth.log
rasdial svk /d
Конфиг
poll *.*.*.* with proto pop3
    user "ko*" with password "****"
    smtphost 10.*.*.*
    nokeep
    smtpname ko**@*.ru
svktelnet.scr -
172.24.**.** 23
WAIT "Username:"
SEND "net_***\m"
WAIT "Password:"
SEND "***\m"
WAIT "Auth"
SEND ""
Для авторизации в телнет используется программка tst10.exe

1 нояб. 2012 г.

Добавить доменную группу в группу локальных администраторов

PsExec.exe @list net localgroup Администраторы /ADD my_domain\domain_group PsExec - утилита от Руссиновича

6 окт. 2012 г.

LST to *.ireg

#!/usr/bin/perl

use Getopt::Std;
$config_path = '/usr/local/etc/';

open(LST,"L0010404A59F0.txt")|| die("Could not open config file!"); 

while ($_=) {
 if(!/^#/){
   @_=split('\t');
   $p0=uc(@_[0]);
   $p1=@_[1];
   $p2=@_[2];
   @_=split(',',$p2);
   $p10=@_[0];
   $p11=@_[1];
   $p12=@_[2];
   $p12=~tr/\n//d;
   $p13=@_[3];
   $p13=~tr/\n//d;
   $p14=@_[4];
   $p13=~tr/\n//d;
   open IREG,">>", $p1.".ireg";
   print  IREG "[general]\n";
   print  IREG "action = new\n";
   print  IREG "bankbranch = '001040'\n";
   print  IREG "template = '001040000000'\n";
   print  IREG "\n";                           
   print  IREG "[configuration]\n";
   print  IREG "terminalgroup = 'ПВН'\n";
   print  IREG "seniorcashierpwd = '123456'\n";
   print  IREG "\n";
   print  IREG "[terminal]\n";
   printf IREG "tid = '00%s'\n",$p1;
   printf IREG "merchantid = '%s'\n",$p1;
   print  IREG "accesspoint = 'INTERNET'\n";
   printf IREG "receiptheader-1 = '\\s\\b%s %s\\n'\n",$p13,$p14;
   printf IREG "receiptheader-2 = '\\w%s\\n'\n",$p10;
   printf IREG "receiptheader-3 = '\\w%s,\\n'\n",$p11;
   printf IREG "receiptheader-4 = '\\w%s\\n'\n",$p12;
   printf IREG "sslcertificatepem = '%s'\n",$p0;
   close IREG;
 }
}

# [general]
# action = new
# bankbranch = '001040'
# template = '001040000000'
# 
# [configuration]
# terminalgroup = 'ПВН'
# seniorcashierpwd = '123456'
# 
# [terminal]
# tid = '00628201'
# merchantid = '628201'
# accesspoint = 'INTERNET'
# receiptheader-1 = '\s\bФГУП ПОЧТА РОССИИ\n'
# receiptheader-2 = '682962 ОПС Шумный\n'
# receiptheader-3 = '\w с. Шумный\n'
# receiptheader-4 = '\w ул. Верхняя, 1\n'
# sslcertificatepem = '0010404A58BA.TLM'

17 сент. 2012 г.

переименование приходящих из АРМ КБР файлов в формат 8.3
c:\usr\bin\find . -name "0813823*.EDB" | gawk "{print \"mv \"$1\" \"$1 }" | sed "s/0813\(823\)...\(..\)\(...\)\.\(ED\)/\2\3\.\4/2" |cmd.exe

Обработка ROO/RPO (блокировка счетов) из ПТК ПСД

Автоматизация обработки сообщений ROO/RPO (блокировка счетов) из ПТК ПСД Написан скрипт на shell, который работает с архивом сообщений ПТК ПСД. Скрипт забирает все сообщения 365-П (mz*), ищет среди них новые с момента последнего запуска, распаковывает (дважды), из полученного выбирает ROO/RPO (блокировка счетов), запускает Верба-OW, расшифровывает, запускает конвертор форматов из формата 365-П в формат, который понимает Диасофт 4х4. Конвертор писал не я, конвертор берет имена файлов (вход и выход), ищет внутри файлов блокировку/разблокировку, формирует выходной файл. Конвертор написан на С++. Применяемые утилиты:
1.Шелл и пр. (bc,ls,egrep,wc,rm,mv,cp)
2.7-zip
3.Верба-OW
4.iconv
5.blat
#!/c:/usr/bin/sh

#Const
MailToList="p365@vsk.bank.ru"
MailFrom="p365@vsk.bank.ru"
MailSubj="365-P RPO/ROO"
SMTPServer="10.10.240.10"
Convertor="C:/365P/nal2dia.exe"
Verba="FColseOW.exe"
UnCab=c:/progra~1/7-zip/7z.exe
UnArj=c:/progra~1/7-zip/7z.exe
Log="C:/365P/take365.log"
PtkInPath="P:/ARH"
ProcdPath="C:/365P/PROCESSED"
PrgDir="C:/365P/PROCESSING"
UnpktDir="C:/365P/UNPACKED"
DiasoftIn="C:/365P/4X4/IN"
DiasoftArc="C:/365P/4X4/ARC"
DiasoftTmp="C:/365P/4X4/TMP"
DiasoftOut="O:/DIASOFT/LOAD/365P"
VerbaDir="C:\\PROGRA~1\\MDPREI\\-OW~1"
ByDatePath=`date +%Y`/`date +%m`/`date +%d`
PtkInFiles=$PtkInPath/$ByDatePath
ProcdFiles=$ProcdPath/$ByDatePath
PTKFMask="^[mM][zZ]*"
NalFMask="^[Rr][OoPp]*"

if ! test -d $ProcdFiles ; then ; mkdir -p $ProcdFiles ; fi

InFilesList=`ls -1 --sort=t $PtkInFiles| egrep $PTKFMask`
PrdFilesList=`ls -1 --sort=t $ProcdFiles`
NumInFiles=`ls -1 $PtkInFiles | egrep $PTKFMask | wc -l`
NumPrdFiles=`ls -1 $ProcdFiles  | egrep $PTKFMask | wc -l`

echo `date +%c` Input files total:       $NumInFiles >>$Log
echo `date +%c` Already processed files: $NumPrdFiles >>$Log
# FilesToProc=`echo $NumInFiles - $NumPrdFiles | c:/usr/bin/bc`
((FilesToProc=$NumInFiles - $NumPrdFiles))
echo `date +%c` Files to processing: $FilesToProc >>$Log
if [ FilesToProc -lt "1" ]
then
        echo `date +%c` Nothing to do, honey, exiting... >>$Log
        exit
else
        #if found smth new!
        # copy it to processed out path to remember what already processed
        echo $InFilesList | head -n $FilesToProc | xargs --replace='{}' cp $PtkInPath/`date +%Y`/`date +%m`/`date +%d`/'{}' $PrgDir/'{}'
        echo `date +%c` `echo $InFilesList | head -n $FilesToProc` >>$Log
        # unpack all CAB (!) files to UNPACKED directory
        echo $InFilesList | head -n $FilesToProc | xargs --replace='{}' $UnCab e $PrgDir/'{}' -o$UnpktDir
        # unpack all AFN*.arj files to UNPACKED directory
        ls -1 $UnpktDir | egrep "^[Aa][Ff][Nn]*" |xargs --replace='{}' $UnArj e $UnpktDir/'{}' -o$UnpktDir
        # move all RP* files to 4x4 directory
        echo `ls -1 $UnpktDir | egrep $NalFMask |xargs --replace='{}' mv -f $UnpktDir/'{}' $DiasoftIn/'{}'`
        # clear all other shit
        rm $UnpktDir/*
        # move all processed mz* files from PROCESSING to PROCESSED
        echo $InFilesList | head -n $FilesToProc | xargs --replace='{}' mv -f $PrgDir/'{}' $ProcdFiles/'{}'
        #decode here
        if [ `ls -1 $DiasoftIn | egrep $NalFMask | wc -l` -gt 0 ]
        then
                ScriptName=./`date +%s`.scr
                echo $ScriptName
                echo "Uncrypt $DiasoftIn\\\r*.*" > $ScriptName
                echo Start >> $ScriptName
                echo Exit  >> $ScriptName
                `$VerbaDir/$Verba /@$ScriptName`
                echo `date +%c` Found new RPO/ROO files:`ls -1 $DiasoftIn | egrep $NalFMask | wc -l` >>$Log
                echo `date +%c` `ls -1 $DiasoftIn | egrep $NalFMask` >>$Log
                LogFile=./`date +%s`.log
                for f in $DiasoftIn/[Rr][OoPp]*
                  do
                        echo  $f  >>$LogFile
                        echo  \\r >>$LogFile
                        cat   $f | iconv.exe -s -f 866 -t cp1251 >>$LogFile
                        echo  \\f\\r >>$LogFile
                  done
                if ! test -d $DiasoftArc/$ByDatePath  ;then; mkdir -p $DiasoftArc/$ByDatePath; fi
                ls -1 $DiasoftIn | egrep $NalFMask | xargs --replace='{}' cp -i $DiasoftIn/'{}' $DiasoftArc/$ByDatePath/'{}'
                # convert format to diasoft 4x4 compartible files
                ls -1 $DiasoftIn  | egrep $NalFMask | xargs --replace='{}' $Convertor $DiasoftIn/'{}' $DiasoftTmp/'{}'
                echo `date +%c` Sucsessfully converted files:`ls -1 $DiasoftTmp | egrep $NalFMask | wc -l` >>$Log
                echo `date +%c` `ls -1 $DiasoftTmp | egrep $NalFMask` >>$Log
                ls -1 $DiasoftTmp | egrep $NalFMask | xargs --replace='{}' mv $DiasoftTmp/'{}' $DiasoftOut/'{}'
                MailBody="365-P RPO/ROO received at "`date +%c`
                blat.exe -t $MailFrom -f $MailToList -s $MailSubj -i $MailFrom -q -server $SMTPServer -body "$MailBody" -attach $LogFile
                rm $LogFile
                  rm $DiasoftIn/*
                  rm $ScriptName
        fi
fi


Выгодоприобретатели

#include ""
#include ""
#include ""
#include ""

#define MAXSTRING 1024
#define BUFFERSIZE  10
#define HEADERSIZE  4
#define BODYSIZE    8 /* body lines counter+delimiter! */
#define NOTEBEGIN   108
#define NOTELENGTH  40

char * my_strlwr(char * s);

int cdecl main(unsigned argc, char *argv[])
{
  char *expression[]={

  "агент","поруч","комис","доверии","управл","принци","комит","цессии",
  "ао","ассоциац","гуп","зао","оао","ооо","тоо","муп","ичп","пбоюл",
  "ип","нко","филиал","предст","копер","фонд","союз","сп","гоу","доу",
  "тсж","гск","гпк","роо","траст","нко"};

  FILE *from, *to;
  unsigned char *str[BUFFERSIZE],*found;
  unsigned char *drive, *dir,*path_in,*path_out;
  unsigned char *name,*ext, *notefull;
  register i;
  if(argc!=2) {
    printf("Usage: filter \n");  exit(1);  }
  if( (drive = (char*)malloc(sizeof(char)*MAXSTRING)) == NULL){
    printf("Cannot allocate memory.\n");     exit(1);
  }
  if( (dir = (char*)malloc(sizeof(char)*MAXSTRING)) == NULL){
    printf("Cannot allocate memory.\n");     exit(1);
  }
  if( (path_in = (char*)malloc(sizeof(char)*MAXSTRING)) == NULL){
    printf("Cannot allocate memory.\n");     exit(1);
  }
  if( (path_out = (char*)malloc(sizeof(char)*MAXSTRING)) == NULL){
    printf("Cannot allocate memory.\n");     exit(1);
  }
  if( (name = (char*)malloc(sizeof(char)*MAXSTRING)) == NULL){
    printf("Cannot allocate memory.\n");    exit(1);
  }
  if( (ext = (char*)malloc(sizeof(char)*MAXSTRING)) == NULL){
    printf("Cannot allocate memory.\n");    exit(1);
  }
  if( (notefull = (char*)malloc(sizeof(char)*MAXSTRING)) == NULL){
    printf("Cannot allocate memory.\n");    exit(1);
  }
  strcpy(path_out,argv[1]);
  strcpy(path_in,argv[1]);
  fnsplit(path_in,drive,dir,name,ext);
  fnmerge(path_in,drive,dir,name,".TMP");
  free(drive);
  free(dir);
  free(ext);
  /*rename source to SRCNAME.tmp */
  if((rename(path_out,path_in)!=NULL)){
    printf("Cannot rename source file.\n"); exit(1);
  }
  /* open source file */
  if((from = fopen(path_in, "rb"))==NULL){
    printf("Cannot open source file.\n"); exit(1);
  }
  /* open destination file */
  if((to = fopen(path_out, "wb"))==NULL){
    printf("Cannot open destination file.\n"); exit(1);
  }
  /* allocate memory for BUFFERSIZE lines */
  for(i=0;i= 'A' && *t <= 'Z' ){
                *t = *t + ('a' - 'A');
        }
        if (*t >= 0x80 && *t <= 0x8F ){
                *t = *t + (0xA0 - 0x80);
        }
        if (*t >= 0x90 && *t <= 0x9F ){
                *t = *t + (0xE0 - 0x90);
        }
        t++;
  }
  return s;
}