kontrola obsahu uctu na FTP serveru

Michal Kubecek mike na mk-sys.cz
Pondělí Listopad 4 12:02:51 CET 2002


On Mon, Nov 04, 2002 at 11:44:36AM +0100, Tomas Vida wrote:

> mam na RH7.x proftpd server. Je na nem nekolik uctu, a ja potrebuji
> kontrolovat obsah konkretniho uctu. V pripade, ze se na nem objevi novy
> soubor, tak aby mi poslal sms, mail nebo neco podobneho. 
> Mozna by to mohl byt script, ktery by kontroloval urcity adresar,
> pamatoval si obsah, a v pripade zmeny by to hlasil. Mohlo by se to
> spoustet cronem....
> Asi to jde napsat, ale ja to neumim.
> 
> Muze mi nekdo pomoct? Nevideli jste nekde neco podobneho?

Kdysi jsem něco podobného potřeboval a řešil jsem to sledováním logu.
Našel jsem ten zdroják, přikládám ho níže, ale je to strašně prasácky
napsané, takže ho berte spíš jen jako volnou inspiraci a ukázku, jak
nepsat programy :-).

                                                       Michal Kubeček


---------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <unistd.h>


inline void skip(char*& p, int n)
{
  for (int j=0; j<n; j++) {
    while(*p && *p!=' ') p++;
    while(*p && *p==' ') p++;
  }
}


int main(int argc, char* argv[])
{
  char* p;
  char Buff[256];
  char cmd[256];
  char *fn;

  FILE* fp = fopen("/var/log/xferlog", "r");
  if (!fp) return 1;
  fseek(fp, 0, SEEK_END);

  while(1) {
    sleep(1);
    if (!fgets(Buff, 256, fp)) continue;

    p = Buff; skip(p, 8);
    fn = p; while(*p && !isspace(*p)) p++; if (*p) *p++ = ' ';
    while(*p && isspace(*p)) p++;
    skip(p, 2);
    if (*p != 'i') continue;

    printf("-- [%s]\n", fn); fflush(stdout);
    if (!strncmp(fn, "/home/ftp/./incoming/m1/", 24)) {
      printf("--> m1\n"); fflush(stdout);
      sprintf(cmd, "/home/cbfstat/bin/manage m1 /home/ftp%s", fn+11);
      system(cmd);
    } else if (!strncmp(fn, "/home/ftp/./incoming/w1/", 24)) {
      printf("--> w1\n"); fflush(stdout);
      sprintf(cmd, "/home/cbfstat/bin/manage w1 /home/ftp%s", fn+11);
      system(cmd);
    }

    sleep(1);
  }

  return 0;
}
--------------------------------------------------------------------------


Další informace o konferenci Linux