Schrift
[thread]11422[/thread]

File Datum wird verändert



<< >> 8 Einträge, 1 Seite
electracks
 2008-03-06 16:22
#106680 #106680
User since
2008-03-05
6 Artikel
BenutzerIn
[default_avatar]
Ich werde nun das ganze per system call versuchen. Wenn einer eine bessere Idee hat....
ptk
 2008-03-06 21:30
#106684 #106684
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Ich vermute, dass Archive::Zip einfach nicht lastModTime() aus der ZIP-Datei verwendet. Aber du kannst es ja zur Not selbst auslesen und mit utime() setzen.
electracks
 2008-03-06 15:59
#106760 #106760
User since
2008-03-05
6 Artikel
BenutzerIn
[default_avatar]
Hallo!

Ich habe folgendes Problem. Ein skript soll eine Zip-Datei aus einer Mail extrahieren und die Datei dann entpacken. Das funktioniert auch alles einwandfrei. Komischerweise bekommen aber die entpackten Dateien immer das aktuelle Datum und nicht das Datum der Dateien im Zip File. Ich habe das Ganze schon mit 2 verschiedenen zip Modulen (Archive::Zip und IO::Uncompress::Inflate) probiert. Könnte es dran liegen dass ich auf einen Windowsshare entpacke (CIFS)? Lokal funktioniert es soweit ich das sehe.
Weiss jemand einen Lösungsansatz oder einen Workaround?

Folgendes Script verwende ich:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
001: #!/usr/bin/perl
002: use strict;
003: use MIME::Explode;
004: use File::Path;
005: 
006: my $infile = '/scripts/deploy/test.txt';    #Datei zum Zwischenspeichern der Mail
007: my $deployroot = '/deployshare/_Deployment/02_Deployments'; #Pfad zu den Deployments
008: my $ticket = "";
009: my $dateiname = "";
010: my $logfile = "unzip.log";
011: 
012: #Zwischenspeichern der Mail
013: 
014: open(IN,">$infile") or die "Konnte Tempdatei $infile nicht öffnen";
015: while(<>){
016:         print IN  $_;
017: }
018: close IN;
019: 
020: open(IN,"<$infile") or die "Konnte Tempdatei $infile nicht öffnen";
021: while(<IN>){
022: $_ =~ m/\[Ticket#(\d+)/;
023: $ticket = $1;
024: }
025: close IN;
026: 
027: open(IN,"<$infile") or die "Konnte Tempdatei $infile nicht öffnen";
028: while(<IN>){
029: $_ =~ m/filename\=\"(.*?\.zip)/;
030: $dateiname = $1;
031: }
032: close IN;
033: 
034: #Auslesen des Dateinamens ohne Extension
035: 
036: $dateiname =~ m/^(.*?)\./;
037: my $deployname = $1;
038: 
039: #Auslesen des Jahres aus dem Dateinamen
040: 
041: $dateiname =~ m/(\d\d)......\.zip$/;
042: my $deployyear = $1;
043: 
044: #Auslesen des Deployment Präfix
045: 
046: $dateiname =~ m/^(....)/;
047: my $prefix = $1;
048: 
049: #Erstellen des Pfads
050: my $deploypath = $deployroot."/GJ_".$deployyear."/".$deployname;
051: my $input = $deploypath."/".$dateiname;
052: my $output = $deploypath."/".$ticket."/";
053: umask "0000";
054: #Prüfen ob Verzeichnis schon vorhanden
055: if (-d $deploypath){
056:         anhangkopieren($deploypath);
057: #Entpacken des Zips 1.Attribut input, 2. Attr. output, 3. Attr. log
058:     entpacken($input,$output,$logfile);
059: }
060: #Fallunterscheidung nach Deployments, Verzeichnis erstellen und Anhang kopieren
061: 
062: elsif ($prefix eq "oms_"){
063: 
064: mkpath ([$deploypath.'/oms', $deploypath.'/Backup/P/oms',
065:                 $deploypath.'/Backup/S/oms', $deploypath.'/'.$ticket]);
066: 
067: anhangkopieren($deploypath) or die("Anhang konnte nicht aus Mail extrahiert werden");
068: entpacken($input,$output,$logfile);
069: }
070: elsif ($prefix eq "PT5_"){
071: 
072: mkpath ([$deploypath.'/website2', $deploypath.'/Backup/P/website2',
073:                 $deploypath.'/Backup/S/website2', $deploypath.'/'.$ticket]);
074: 
075: 
076: anhangkopieren($deploypath) or die("Anhang konnte nicht aus Mail extrahiert werden");
077: entpacken($input,$output,$logfile);
078: }
079: elsif ($prefix eq "evo_"){
080: 
081: mkpath ([$deploypath.'/admall', $deploypath.'/Backup/P/admall',
082:                 $deploypath.'/Backup/S/admall', $deploypath.'/'.$ticket]);
083: 
084: anhangkopieren($deploypath);
085: entpacken($input,$output,$logfile);
086:  }
087: else {
088: die("+++++ $dateiname Deployment kann nicht zugeordnet werden +++++");
089: };
090: 
091: 
092: #Extrahieren des Mailanhangs aus der Mail und speichern des Anhangs in Outputdir
093: 
094: sub anhangkopieren{
095:   my $explode = MIME::Explode->new(
096:     output_dir         => "$_[0]",
097:     mkdir              => 0777,
098:     decode_subject     => 1,
099:     check_content_type => 1,
100:     content_types      => ["application/x-zip-compressed"],
101:     types_action       => "include"
102:   );
103: 
104: 
105:   open(MAIL, "<$infile") or
106:         die("Couldn't open file.mbox for reading: $!\n");
107:   open(OUTPUT, ">tmp_file.tmp")
108:         or die("Couldn't open file.tmp for writing: $!\n");
109:   my $headers = $explode->parse(\*MAIL, \*OUTPUT);
110:   close(OUTPUT);
111:   close(MAIL);
112:  }
113: 
114: sub entpacken{
115: use Archive::Zip qw( :ERROR_CODES :CONSTANTS );
116:     my $zipfile = Archive::Zip->new($_[0]);
117:         if(defined $zipfile){
118:         my @members = $zipfile->members();
119:             foreach my $member (@members){
120:             chdir $_[1];
121:             $zipfile->extractMember($member);
122:             open (LOG,">$_[2]");
123:             print LOG $_[1].$member." erstellt";
124:             close LOG;
125:         }
126:     }
127: }
electracks
 2008-03-14 12:25
#107035 #107035
User since
2008-03-05
6 Artikel
BenutzerIn
[default_avatar]
Ich hab mittlerweile rausgefunden dass das Script keine Permission hat einen chmod durchzuführen. Weiß jemand unter welchem User perl skripte laufen die man über die postfix funktion "Feed to program" startet? Oder wie ich herausfinden kann mit welchem User mein Skript läuft?
renee
 2008-03-14 12:40
#107038 #107038
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du kannst Dir die User ID und Gruppe im Perl-Programm ausgeben lassen. Die Spezialvariablen sind in perlvar beschrieben.

Oder Du beobachtest top...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
nepos
 2008-03-14 12:44
#107039 #107039
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Wahrscheinlich unter dem Postfix-User, aber wie renee schon sagte, einfach die Spezialvariablen mal auswerten.
electracks
 2008-04-07 14:26
#107989 #107989
User since
2008-03-05
6 Artikel
BenutzerIn
[default_avatar]
Ich hab in der perl config einen expliziten perl user angegeben.
Das Problem ist dass dieser user scheinbar kein Recht hat die Systemzeit auf der CIFS Freigabe zu ändern. Weiss jemand wie ich ihm die Rechte geben kann? Eigentlich sind auf dem File 777 Rechte.
GwenDragon
 2008-04-07 14:32
#107990 #107990
User since
2005-01-17
14748 Artikel
Admin1
[Homepage]
user image
Welchen owner und group hat denn die Datei?
Ist der Perl-User denn in der Gruppe drin?

Quote
dass dieser user scheinbar kein Recht hat die Systemzeit auf der CIFS Freigabe zu ändern
Wieso muss der User die Systemzeit ändern!?

Welche Rechte hat er denn für die Freigabe? Ist die Freigabe auf einem Windows-System (nehme ich mal an)? Dann richten sich doch wohl die Möglichkeiten, was der User tun darf, nach dem Login dort.
<< >> 8 Einträge, 1 Seite



View all threads created 2008-03-06 15:59.