WfAction Reject is not working

I have two steps in the workflow....If the document is rejected in the 2nd step, one meta data value should be updated as below:
<if wfAction like "REJECT"$>
<$wfUpdateMetaData("xsrt_bill_status","Re-Submit")$>
<$endif$>
I have tried this code in the entry and exit events of step 2. but it's not working.
Thanks,
Chely
Edited by: Chely on Sep 6, 2012 1:59 AM

REJECTs are a bit tricky.
First of all, when a user reject a content item in a step N, it leaves this step immediately (neither EXIT, not UPDATE events are called, so whatever code you place there, it won't be executed).
As stated in the manual, "If any reviewer rejects the content, it goes back to the most recent Review/Edit Revision or Review/New Revision step. If there is no such step, the content goes back to the original author (the Auto-Contribution step)."
Therefore, you'd have to place you code to the ENTRY event of the previous step; provided that it is Review/Edit Revision or Review/New Revision.
Particularly for your use case, there is also a workaround:
- place this code to the ENTRY of the 2nd Step
<$wfUpdateMetaData("xsrt_bill_status","Re-Submit")$> - place also that code to the EXIT of the 2nd Step
<$wfUpdateMetaData("xsrt_bill_status","other value")$> (this means that the value will be restored unless REJECT occurs). It is not exactly what you intended (as long as the item is in the 2nd step - for all UPDATEs - the value of the metadata field is set incorrectly)

Similar Messages

  • Bridge on Mac deleting/rejecting/filtering not working!?! HELP

    Ok seems as if I am having a problem only windows users have run into in earlier versions of CS.  I was using CS5 on my PC and for many reasons I had to dump the dead weight of the PC world and move to a Mac... FINALLY! But that also ment purchasing a new CS5 for Mac.  I thought this would be flawless... CS5 to CS5. WRONG. I store my photos on a 2TB external, same one i used on my PC. Now, I can not do any sort of "editing" of image info like "delete, "reject", "star" or anyother rating within bridge. It does not work with key commandes or from the menu.  After researching this issue for two days it seems as if this issuse has been reserved for PC users and earlier versions being upgraded to newer ones.  This is not the case for me.  They said to "use as Administrator" I am the adminsitrator, and have made sure the permisissions have been set to read and write. That has not made a difference.  Others have said that there seems to be no solution. Things they have tried include:
    ~Uninstall/reinstall of CS
    ~administrator settings
    ~setting it to open automatically at start up
    ~deleting pictures and reloading them through the new software version (this also seems to be an issue reserved for photos that have already been uploaded, I do not know if this will change with new images loaded through the new version as I have not had a chance to try it, since I'm trying to resolve this first)
    I need to have access to my previously loaded files and this is a huge hiccup!
    PS I can open the files to Photoshop, and edit, and the changes seem to stick, its just any organization, deleting, staring etc actually in bridge DONT stick. another issue that the PC users seem to have is error messages and pop-up windows when tring to exicute these tasks. I have no error messages.
    PLEASE HELP! thx

    I am read only on both of my externals! when i tried to find a way to set permissions, it says that I should be able to find a "lock" once I have gone to "get info" there is no "lock" so that I may enter my password and change permissions.
    First thing that comes to my mind is that you have used the same external disks as you did for Windows. And that you did not reformatted them for a Mac using MacOS Extended (Journaled) formatting.
    Without knowing your situation I assume you have a back up disk with the same content as your problem disk. If not it might be wise to buy a new back Up disk. There is one thing sure about disks, they all have an end date, some sooner most later but they all die and often at a moment you did not expect it nor could use it...
    Make sure you have a proper back up and the reformat the disk (or the new disk) using Mac Disk Utillity
    Personally I always use the safety option to overwrite the disk once with Zeros but that takes a bit longer.
    Give it a proper name and use the default format as mentioned above. Copy the content back to the new formatted disk and try again
    If in doubt try another older disk or buy a cheap one for testing if this method is working for you.

  • Fault handling from MDS is not working for messagerejection

    Hi All,
    I am sorry if i am asking simple things, but after trying i couldn't figure out the problem so i reached here.
    In my project i am using file adapter in many places, so rejection handler is very important in finding out the missing files at the time of reading the file.So i created fault policies and bindings and i created simple process and placed the polices and binding files in the project, as expected it is working fine but if i referred the same files from my mds path rejection is not working.
    here is my fault polices and binding files.
    faultpolices.xml
    <?xml version='1.0' encoding='UTF-8'?>
    <faultPolicies version="2.0.1" xmlns="http://schemas.oracle.com/bpel/faultpolicy">
    <faultPolicy version="2.0.1" id="BpelFaultMechanism" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.oracle.com/bpel/faultpolicy" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Conditions>
    <faultName xmlns:bpelx="http://schemas.oracle.com/bpel/extension" name="bpelx:bindingFault">
    <condition>
    <action ref="retry-action"/>
    </condition>
    </faultName>
    <faultName xmlns:bpelx="http://schemas.oracle.com/bpel/extension" name="bpelx:remoteFault">
    <condition>
    <action ref="retry-action"/>
    </condition>
    </faultName>
    <faultName xmlns:bpelx="http://schemas.oracle.com/bpel/extension" name="bpelx:selectionFailure">
    <condition>
    <action ref="retry-action"/>
    </condition>
    </faultName>
    </Conditions>
    <Actions>
    <Action id="retry-action">
    <retry>
    <retryCount>4</retryCount>
    <retryInterval>2</retryInterval>
    <retryFailureAction ref="rethrow-action"/>
    </retry>
    </Action>
    <Action id="human-intervention-action">
    <humanIntervention/>
    </Action>
    <Action id="abort-action">
    <abort/>
    </Action>
    <Action id="replay-action">
    <replayScope/>
    </Action>
    <Action id="rethrow-action">
    <rethrowFault/>
    </Action>
    <Action id="ora-terminate">
    <abort/>
    </Action>
    </Actions>
    </faultPolicy>
    <faultPolicy version="2.0.1" id="RejectedMessages">
    <Conditions>
    <faultName xmlns:rjm="http://schemas.oracle.com/sca/rejectedmessages" name="rjm:Messagerejection">
    <condition>
    <action ref="writeToFile"/>
    </condition>
    </faultName>
    </Conditions>
    <Actions>
    <Action id="writeToFile">
    <fileAction>
    <location>/u01/textdata/SOADEV/rejection</location>
    <fileName>Messagerejection_%ID%_%TIMESTAMP%.xml</fileName>
    </fileAction>
    </Action>
    </Actions>
    </faultPolicy>
    </faultPolicies>
    Note:-In the above xml fault policy BpelFaultMechanism is used in all composite for common remote and binding fault errors and this one is working fine from mds location.
    Fault-Binding.xml
    <?xml version='1.0' encoding='windows-1252'?>
    <faultPolicyBindings version="2.0.1" xmlns="http://schemas.oracle.com/bpel/faultpolicy" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <composite faultPolicy="BpelFaultMechanism"/>
    <service faultPolicy="RejectedMessages">
    <name>Messagerejection</name>
    </service>
    </faultPolicyBindings>
    Composite.xml
    <?xml version="1.0" encoding="UTF-8" ?>
    <!-- Generated by Oracle SOA Modeler version 1.0 at [30/09/12 5:41 PM]. -->
    <composite name="Messagerejection"
    revision="1.0"
    label="2012-09-30_17-41-29_597"
    mode="active"
    state="on"
    xmlns="http://xmlns.oracle.com/sca/1.0"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
    xmlns:orawsp="http://schemas.oracle.com/ws/2006/01/policy"
    xmlns:ui="http://xmlns.oracle.com/soa/designer/">
    <import namespace="http://xmlns.oracle.com/pcbpel/adapter/file/Correlation/Messagerejection/Messagerejection"
    location="Messagerejection.wsdl" importType="wsdl"/>
    <service name="Messagerejection" ui:wsdlLocation="Messagerejection.wsdl">
    <interface.wsdl interface="http://xmlns.oracle.com/pcbpel/adapter/file/Correlation/Messagerejection/Messagerejection#wsdl.interface(Read_ptt)"/>
    <binding.jca config="Messagerejection_file.jca"/>
    <property name="oracle.composite.faultPolicyFile">oramds:/apps/Faultpolicyfiles/fault_policies.xml</property>
    <property name="oracle.composite.faultBindingFile">oramds:/apps/Faultpolicyfiles/fault_binding.xml</property>
    </service>
    <component name="Messagerejectionservice" version="1.1">
    <implementation.bpel src="Messagerejectionservice.bpel"/>
    <property name="bpel.config.oneWayDeliveryPolicy" type="xs:string"
    many="false">async.cache</property>
    </component>
    <wire>
    <source.uri>Messagerejection</source.uri>
    <target.uri>Messagerejectionservice/Messagerejection</target.uri>
    </wire>
    </composite>
    Also in some cases i am going with De-batching option,in which my xml file contains multiple record and publishing each record to the target service. In this case if any record has improper content then that particular record from should move to the custom folder.Please let me know how can i do this.
    I hope some one will help me here.
    Regards,
    Tarak

    Hi Kalyan,
    Thanks for helping me here.
    Now i am able to resolve the issue after restarting the server i place the properties of the files as below
    <?xml version="1.0" encoding="UTF-8" ?>
    <!-- Generated by Oracle SOA Modeler version 1.0 at [30/09/12 5:41 PM]. -->
    <composite name="Messagerejection"
    revision="1.0"
    label="2012-09-30_17-41-29_597"
    mode="active"
    state="on"
    xmlns="http://xmlns.oracle.com/sca/1.0"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
    xmlns:orawsp="http://schemas.oracle.com/ws/2006/01/policy"
    xmlns:ui="http://xmlns.oracle.com/soa/designer/">
    <import namespace="http://xmlns.oracle.com/pcbpel/adapter/file/Correlation/Messagerejection/Messagerejection"
    location="Messagerejection.wsdl" importType="wsdl"/>
    <service name="Messagerejection" ui:wsdlLocation="Messagerejection.wsdl">
    <interface.wsdl interface="http://xmlns.oracle.com/pcbpel/adapter/file/Correlation/Messagerejection/Messagerejection#wsdl.interface(Read_ptt)"/>
    <binding.jca config="Messagerejection_file.jca"/>
    </service>
    <property name="oracle.composite.faultPolicyFile">oramds:/apps/Faultpolicyfiles/fault_policies.xml</property>
    <property name="oracle.composite.faultBindingFile">oramds:/apps/Faultpolicyfiles/fault_binding.xml</property>
    <component name="Messagerejectionservice" version="1.1">
    <implementation.bpel src="Messagerejectionservice.bpel"/>
    <property name="bpel.config.oneWayDeliveryPolicy" type="xs:string"
    many="false">async.cache</property>
    </component>
    <wire>
    <source.uri>Messagerejection</source.uri>
    <target.uri>Messagerejectionservice/Messagerejection</target.uri>
    </wire>
    </composite>
    Regards,
    Tarak

  • HT204187 Email account does not work on the Mac but works on my iPad and iPhone. The account information was added on the Mac. I keeps rejecting my password.

    I have seral email accounts on my Mac. One does not work on the Mac but works on my iPad and iPhone. The account information was added on the Mac. I keeps rejecting my password.

    You don't input the information in manually for iCloud mail. It is automatically set up for you when you sign into iCloud via System Preferences and choose the Mail checkbox. Sign out of iCloud or deselect Mail in iCloud preferences. Open Mail's preferences and choose accounts tab. If iCloud account still exists in the list, delete it. Sign back into iCloud or check the box for mail. The account will be auto created for you.

  • My dvd slot for imac10,1 does not work. It rejects the disc. Problem after reinstall of backup from hdd.

    My dvd slot for imac10,1 does not work. I had a new harddrive installed in November and the MacStore installed my backups from an external harddrive. I do not use it other than to upload programs, so I have not tried using it until tax season, but it rejects the disc. The ata file indicates no dvd firmware, but the serial-ata does indicate firmware for a dvdrw. What might I do about this to bring the dvd back, least expensive to most?

    Yesterday I started having the same problem. Can read disc (play movies and music) but blank disk are ejected or idvd cannot see the blank disk. I have a almost 12 month old 27" i7 imac.

  • BPEl Human Activity Issue - Reject case is not working

    Hi All,
    I have bpel processs. It is works like this:
    It has a human task for approval from manager with ACCEPT or REJECT as outcomes.
    Once the manager Accepts the request, the initiator (say applicant) should get a email updating the status as accepted.
    And when the request is rejected by manager, then the initiator(say applicant) should get an email updating the status.
    The problem is the human activity is working fine for ACCEPT and sending email. But struck up for REJECT outcome. It is waiting for task completion from manager, i mean completion of human activity even though it is completed as the manager rejected it.
    Audit activity log when Human activity got REJECTed by manager:
    *"waiting for "onTaskCompleted" from "TaskService". Asynchronous callback"*
    I tried the below things.
    1) Deleted the task form --> saved the process --> closed Jdev --Re-opened  JDev and created a new task form. Still the same behavior. Not working for REJECT case.
    Can some body help me in figuring out the issue.
    I am using SOA suite 10.1.3.1 n JDev 10.1.3.1
    Thanks,

    Hi,
    I could figure out the solution to the problem.
    The issue was with xquery. I build it wrongly. I could find this from my domain logs.Then I corrected the query. Now it is working fine.
    Thanks,
    Irfan khan

  • Mail not working password rejected

    After latest software update Leopard 10.5.8 Mail receives the message "password rejected" So I type it in and it still fails. I dumped plist file in Library, and tried keychain access repair thinking that maybe something was corrupted. Mail is still not working. My Mail account is through a local Internet provider. It is a POP account.

    OK! I figured this out... and it's probably the dumbest thing I ever encountered using mail. Called internet provider and told them the problem. They looked at the account and said that I had exceeded the quota on the amount of mail on their servers. It created a "POP lock". Stupid...
    Anyways the fix was to change preferences in the advanced tab. Instead of having copy's of emails stored on their servers for a period of time you can choose to do it right away, which I did. Which they prefer apparently. I can't imagine why they wouldn't want copy's of thousands of spam messages stored on their servers for at least a week, maybe longer. They kindly reset my account after changing the settings, thus removing the "POP lock" Works fine now. Thanks for all your help.

  • How do I reject incoming calls on Ios7 when locked? Power button on top right does not work.

    How do I reject incoming calls on Ios7 when locked? Power button on top right does not work.

    I am also facing the same issues. Sometime i get an option to reject call and sometime i won't .
    Tried all the basic troubleshooting i could from my end but nogo. Also tried complete reset by loosing data still the same results. Any suggestions and fix, Apple ???

  • Anonymous Call Rejection not working

    I have anonymous call rejection on my phone, but it doesn't seem to work.  Several times a day I get a call that shows up as "Not_Available" "Unknown Number."
    Is anyone else experiencing this?

    YES, the past few months I have experience many more calls from tele-marketers, timeshare resellers and small business vendors offering their services, Although I am registered with the National Do Not Call Registry, they still try to call me at my residential phone all hours of the day.  
    I depend upon my home phone provider to offer the feature of 'anonymous call rejection' and have entered the *77 to block them
    but
    this feature is not working as advertised.
    Enhancement request, stop sending through calls where CallerID 'Not_Available'. I have no way of knowing whom is calling, nor do I have a way to report a complaint since I cannot identify the company or phone number calling me. Cannot see a call log of incoming calls either.

  • Unable to install "Mavericks" as it asks for my 'Admin Password" and it does not work. Have not used it since I got my iMac in 2008. First upgrade to do so. Any solutions please?

    I have a 2008 iMac which had Leopard initially and I have upgraded to each new OS without a hitch. I downloaded "Mavericks" and began the install, it asked me for my "Admin Password" which I have never ever used since I set the Mac up, I have it safely tucked away so entered it, it rejected it each time. Am sort of lost now, as if my "Admin P/W" does not work here can I go from here?
    I have seen many others with this problem but so far most of the solutions seem to be for the "log in" or "User" password not the Admin one.
    I am running Mountain Lion successfully.
    I have my original disks as supplied and also a Snow Leopard install disk.
    I have seen some info about fixing this via Lion Recovery partition which I must have due to using Mt Lion.
    How can I repair this situation.
    Thank you to all those who respond.

    Thanks for your reply.
    I have visited both the sites you listed but it seems to me that the solutions mentioned are to fix the User or log in p/w's.They do not seem to refer to the admin one again.
    I understand about it being just like other user accts but the fixes do not really refer to it only the above two.
    I have no problem booting up my Mac, I do not use a log in p/w so my problem is with the Admin p/w that was set up back in 2008. This is what I need to reset etc.
    I am quite confused over these pw's as to just what is what and I need to make sure I understand all before I get into deeper trouble following these links.
    This Admin p/w that was set up has never been used and is the only p/w I have except for my Apple ID. All previous upgrades only required my user name log in which has no p/w set up.
    I hope you can follow me here butI have read so much on this it is becoming very confusing about whcih p/w's are what.

  • TS3276 I can receive emails, but I cannot send emails. This just started happening. I have an iPhone and I can send emails from my phone fine. It's just not working on my Macbook. Every time I try to send an email it goes straight to my outbox. Can anyone

    I can receive emails, but I cannot send emails. This just started happening. I have an iPhone and I can send emails from my phone fine. It's just not working on my Macbook. Every time I try to send an email it goes straight to my outbox. Can anyone help?

    Thank you for heading me in the right direction.  I reset my Mail account for Outgoing Mail Server to outbound.att.net:(customer ID)@att.net (instead of smtp.att.yahoo.com, per Apple's online troubleshooting information).   I'm not sure what "(Offline)" means when it appears at the end of my Outgoing Mail Server (SMTP)??  In the Advanced box I clicked on "Use custom port:  465" and checked "Use Secure Sockets Layer."  Authentication:  Password; I have correct User Name and Password put in.  After doing all this, when I try to send emails again today, they go directly to the Outbox and sit there. 
    What's curious is that my first sent email this morning did go out using the Outgoing Mail Server, smtp.att.yahoo.com: (customer ID)@att.net(Offline) but subsequent emails I tried to send with this server were rejected with the message:  "Cannot send message using the server smtp.att.yahoo.com (etc.).  The SMTP server doesn't support TLS(SSL) on port 587.  Verify your account settings and try again."  That's when I tried resetting my Outgoing Mail Server to outbound.att.net (etc.), as mentioned above, and was unsuccessful in sending out any further emails.  I guess my next step is to contact my email service provider, AT&T, and see if they can help me.  Thanks, again, for taking the time to respond and for giving me your input!  Much appreciated!

  • Issue with spamassassin, now mail not working

    Hi ! I installed spamtrainer almost two months ago. Been feeding the [email protected] for several weeks now , 700 emails each day at least .
    There was very little improvement if none at all. Tried to add "@local_domains_maps = (1)" to amavisd.conf last night thinking it might be the problem , though no virtual domain exist. This was one of the issue on the default Amavisd config. The other one is adding the symbolic link which I already done.
    Computer froze while adding the parameter "@local_domains_maps = (1)", so I manually turn off the Power Mac, then mail stopped altogether. The mails are filing up but the clients couldn't send or receive since this incidence .
    FF is the maincf. and amavis.conf
    All help are greatly appreciated.
    mail:/Users/sysadmin root# postconf -n
    alias_maps = hash:/etc/aliases,hash:/var/mailman/data/aliases
    always_bcc =
    command_directory = /usr/sbin
    config_directory = /etc/postfix
    content_filter = smtp-amavis:[127.0.0.1]:10024
    daemon_directory = /usr/libexec/postfix
    debug_peer_level = 2
    enable_server_options = yes
    html_directory = no
    inet_interfaces = all
    local_recipient_maps = proxy:unix:passwd.byname $alias_maps
    luser_relay =
    mail_owner = postfix
    mailbox_size_limit = 0
    mailbox_transport = cyrus
    mailq_path = /usr/bin/mailq
    manpage_directory = /usr/share/man
    maps_rbl_domains =
    message_size_limit = 31457280
    mydestination = $myhostname,localhost.$mydomain,localhost,mail.cpplaw.com,cpplaw.com
    mydomain = cpplaw.com
    mydomain_fallback = localhost
    myhostname = mail.cpplaw.com
    mynetworks = 127.0.0.1/32,192.168.1.0/24,127.0.0.1
    mynetworks_style = host
    newaliases_path = /usr/bin/newaliases
    owner_request_special = no
    queue_directory = /private/var/spool/postfix
    readme_directory = /usr/share/doc/postfix
    recipient_delimiter = +
    relayhost =
    sample_directory = /usr/share/doc/postfix/examples
    sendmail_path = /usr/sbin/sendmail
    setgid_group = postdrop
    smtpd_client_restrictions = permit_mynetworks permit
    smtpd_tls_key_file =
    unknown_local_recipient_reject_code = 550
    virtual_mailbox_domains =
    virtual_transport = virtual
    mail:/Users/sysadmin root# postconf -n
    alias_maps = hash:/etc/aliases,hash:/var/mailman/data/aliases
    always_bcc =
    command_directory = /usr/sbin
    config_directory = /etc/postfix
    content_filter = smtp-amavis:[127.0.0.1]:10024
    daemon_directory = /usr/libexec/postfix
    debug_peer_level = 2
    enable_server_options = yes
    html_directory = no
    inet_interfaces = all
    local_recipient_maps = proxy:unix:passwd.byname $alias_maps
    luser_relay =
    mail_owner = postfix
    mailbox_size_limit = 0
    mailbox_transport = cyrus
    mailq_path = /usr/bin/mailq
    manpage_directory = /usr/share/man
    maps_rbl_domains =
    message_size_limit = 31457280
    mydestination = $myhostname,localhost.$mydomain,localhost,mail.cpplaw.com,cpplaw.com
    mydomain = cpplaw.com
    mydomain_fallback = localhost
    myhostname = mail.cpplaw.com
    mynetworks = 127.0.0.1/32,192.168.1.0/24,127.0.0.1
    mynetworks_style = host
    newaliases_path = /usr/bin/newaliases
    owner_request_special = no
    queue_directory = /private/var/spool/postfix
    readme_directory = /usr/share/doc/postfix
    recipient_delimiter = +
    relayhost =
    sample_directory = /usr/share/doc/postfix/examples
    sendmail_path = /usr/sbin/sendmail
    setgid_group = postdrop
    smtpd_client_restrictions = permit_mynetworks permit
    smtpd_tls_key_file =
    unknown_local_recipient_reject_code = 550
    virtual_mailbox_domains =
    virtual_transport = virtual
    mail:/Users/sysadmin root#
    _______________________Amavisd.cof_________________________
    use strict;
    # Configuration file for amavisd-new
    # This software is licensed under the GNU General Public License (GPL).
    # See comments at the start of amavisd-new for the whole license text.
    #Sections:
    # Section I - Essential daemon and MTA settings
    # Section II - MTA specific
    # Section III - Logging
    # Section IV - Notifications/DSN, BOUNCE/REJECT/DROP/PASS destiny, quarantine
    # Section V - Per-recipient and per-sender handling, whitelisting, etc.
    # Section VI - Resource limits
    # Section VII - External programs, virus scanners, SpamAssassin
    # Section VIII - Debugging
    #GENERAL NOTES:
    # This file is a normal Perl code, interpreted by Perl itself.
    # - make sure this file (or directory where it resides) is NOT WRITABLE
    # by mere mortals, otherwise it represents a severe security risk!
    # - for values which are interpreted as booleans, it is recommended
    # to use 1 for true, and 0 or undef or '' for false.
    # THIS IS DIFFERENT FROM OLDER AMAVIS VERSIONS where "no" also meant false,
    # now it means true, like any nonempty string does!
    # - Perl syntax applies. Most notably: strings in "" may include variables
    # (which start with $ or @); to include characters @ and $ in double
    # quoted strings, precede them by a backslash; in single-quoted strings
    # the $ and @ lose their special meaning, so it is usually easier to use
    # single quoted strings. Still, in both cases a backslash need to be doubled
    # - variables with names starting with a '@' are lists, the values assigned
    # to them should be lists as well, e.g. ('one@foo', $mydomain, "three");
    # note the comma-separation and parenthesis. If strings in the list
    # do not contain spaces nor variables, a Perl operator qw() may be used
    # as a shorthand to split its argument on whitespace and produce a list
    # of strings, e.g. qw( one@foo example.com three ); Note that the argument
    # to qw is quoted implicitly and no variable interpretation is done within
    # (no '$' variable evaluations). The #-initiated comments can not be used
    # within the string. In other words, $ and # lose their special meaning
    # withing a qw argument, just like within '...' strings.
    # - all e-mail addresses in this file and as used internally by the daemon
    # are in their raw (rfc2821-unquoted and nonbracketed) form, i.e.
    # Bob "Funny" [email protected], not: "Bob \"Funny\" Dude"@example.com
    # and not <"@example.com>; also: '' and not ''.
    # Section I - Essential daemon and MTA settings
    # $MYHOME serves as a quick default for some other configuration settings.
    # More refined control is available with each individual setting further down.
    # $MYHOME is not used directly by the program. No trailing slash!
    #$MYHOME = '/var/lib/amavis'; # (default is '/var/amavis')
    # : $mydomain serves as a quick default for some other configuration settings.
    # : More refined control is available with each individual setting further down.
    # : $mydomain is never used directly by the program.
    $mydomain = 'cpplaw.com'; aol.com'; # (no useful default)
    # Set the user and group to which the daemon will change if started as root
    # (otherwise just keep the UID unchanged, and these settings have no effect):
    $daemon_user = 'clamav'; # (no default; customary: vscan or amavis)
    $daemon_group = 'clamav'; # (no default; customary: vscan or amavis)
    # Runtime working directory (cwd), and a place where
    # temporary directories for unpacking mail are created.
    # (no trailing slash, may be a scratch file system)
    $TEMPBASE = $MYHOME; # (must be set if other config vars use is)
    #$TEMPBASE = "$MYHOME/tmp"; # prefer to keep home dir /var/amavis clean?
    # $helpers_home sets environment variable HOME, and is passed as option
    # 'home_dir_for_helpers' to Mail::SpamAssassin::new. It should be a directory
    # on a normal persistent file system, not a scratch or temporary file system
    #$helpers_home = $MYHOME; # (defaults to $MYHOME)
    #$daemon_chroot_dir = $MYHOME; # (default is undef, meaning: do not chroot)
    #$pid_file = "$MYHOME/amavisd.pid"; # (default is "$MYHOME/amavisd.pid")
    #$lock_file = "$MYHOME/amavisd.lock"; # (default is "$MYHOME/amavisd.lock")
    # set environment variables if you want (no defaults):
    $ENV{TMPDIR} = $TEMPBASE; # wise, but usually not necessary
    # MTA SETTINGS, UNCOMMENT AS APPROPRIATE,
    # both $forward_method and $notify_method default to 'smtp:127.0.0.1:10025'
    # POSTFIX, or SENDMAIL in dual-MTA setup, or EXIM V4
    # (set host and port number as required; host can be specified
    # as IP address or DNS name (A or CNAME, but MX is ignored)
    #$forward_method = 'smtp:127.0.0.1:10025'; # where to forward checked mail
    #$notify_method = $forward_method; # where to submit notifications
    # NOTE: The defaults (above) are good for Postfix or dual-sendmail. You MUST
    # uncomment the approprate settings below if using other setups!
    # SENDMAIL MILTER, using amavis-milter.c helper program:
    #$forward_method = undef; # no explicit forwarding, sendmail does it by itself
    # milter; option -odd is needed to avoid deadlocks
    #$notify_method = 'pipe:flags=q argv=/usr/sbin/sendmail -Ac -i -odd -f ${sender} -- ${recipient}';
    # just a thought: can we use use -Am instead of -odd ?
    # SENDMAIL (old non-milter setup, as relay):
    #$forward_method = 'pipe:flags=q argv=/usr/sbin/sendmail -C/etc/sendmail.orig.cf -i -f ${sender} -- ${recipient}';
    #$notify_method = $forward_method;
    # SENDMAIL (old non-milter setup, amavis.c calls local delivery agent):
    #$forward_method = undef; # no explicit forwarding, amavis.c will call LDA
    #$notify_method = 'pipe:flags=q argv=/usr/sbin/sendmail -Ac -i -f ${sender} -- ${recipient}';
    # EXIM v3 (not recommended with v4 or later, which can use SMTP setup instead):
    #$forward_method = 'pipe:flags=q argv=/usr/sbin/exim -oMr scanned-ok -i -f ${sender} -- ${recipient}';
    #$notify_method = $forward_method;
    # prefer to collect mail for forwarding as BSMTP files?
    #$forward_method = "bsmtp:$MYHOME/out-%i-%n.bsmtp";
    #$notify_method = $forward_method;
    # Net::Server pre-forking settings
    # You may want $max_servers to match the width of your MTA pipe
    # feeding amavisd, e.g. with Postfix the 'Max procs' field in the
    # master.cf file, like the '2' in the: smtp-amavis unix - - n - 2 smtp
    $max_servers = 2; # number of pre-forked children (default 2)
    $max_requests = 10; # retire a child after that many accepts (default 10)
    $child_timeout=5*60; # abort child if it does not complete each task in n sec
    # (default: 8*60 seconds)
    # Check also the settings of @av_scanners at the end if you want to use
    # virus scanners. If not, you may want to delete the whole long assignment
    # to the variable @av_scanners, which will also remove the virus checking
    # code (e.g. if you only want to do spam scanning).
    # Here is a QUICK WAY to completely DISABLE some sections of code
    # that WE DO NOT WANT (it won't even be compiled-in).
    # For more refined controls leave the following two lines commented out,
    # and see further down what these two lookup lists really mean.
    #@bypass_virus_checks_acl = qw( . ); # uncomment to DISABLE anti-virus code
    #@bypass_spam_checks_acl = qw( . ); # uncomment to DISABLE anti-spam code
    # Any setting can be changed with a new assignment, so make sure
    # you do not unintentionally override these settings further down!
    # Lookup list of local domains (see README.lookups for syntax details)
    # NOTE:
    # For backwards compatibility the variable names @local_domains (old) and
    # @local_domains_acl (new) are synonyms. For consistency with other lookups
    # the name @local_domains_acl is now preferred. It also makes it more
    # obviously distinct from the new %local_domains hash lookup table.
    # local_domains* lookup tables are used in deciding whether a recipient
    # is local or not, or in other words, if the message is outgoing or not.
    # This affects inserting spam-related headers for local recipients,
    # limiting recipient virus notifications (if enabled) to local recipients,
    # in deciding if address extension may be appended, and in SQL lookups
    # for non-fqdn addresses. Set it up correctly if you need features
    # that rely on this setting (or just leave empty otherwise).
    # With Postfix (2.0) a quick reminder on what local domains normally are:
    # a union of domains spacified in: $mydestination, $virtual_alias_domains,
    # $virtual_mailbox_domains, and $relay_domains.
    @local_domains_acl = ( ".$mydomain" ); # $mydomain and its subdomains
    # @local_domains_acl = qw(); # default is empty, no recipient treated as local
    # @local_domains_acl = qw( .example.com );
    # @local_domains_acl = qw( .example.com !host.sub.example.net .sub.example.net );
    # @local_domains_acl = ( ".$mydomain", '.example.com', 'sub.example.net' );
    # or alternatively(A), using a Perl hash lookup table, which may be assigned
    # directly, or read from a file, one domain per line; comments and empty lines
    # are ignored, a dot before a domain name implies its subdomains:
    #read_hash(\%local_domains, '/var/amavis/local_domains');
    #or alternatively(B), using a list of regular expressions:
    # $local_domains_re = new_RE( qr'[@.]example\.com$'i );
    # see README.lookups for syntax and semantics
    # Section II - MTA specific (defaults should be ok)
    # if $relayhost_is_client is true, IP address in $notify_method and
    # $forward_method is dynamically overridden with SMTP client peer address
    # if available, which makes possible for several hosts to share one daemon
    #$relayhost_is_client = 1; # (defaults to false)
    #$insert_received_line = 1; # behave like MTA: insert 'Received:' header
    # (does not apply to sendmail/milter)
    # (default is true)
    # AMAVIS-CLIENT PROTOCOL INPUT SETTINGS (e.g. with sendmail milter)
    # (used with amavis helper clients like amavis-milter.c and amavis.c,
    # NOT needed for Postfix and Exim)
    $unix_socketname = "$MYHOME/amavisd.sock"; # amavis helper protocol socket
    #$unix_socketname = undef; # disable listening on a unix socket
    # (default is undef, i.e. disabled)
    # (usual setting is $MYHOME/amavisd.sock)
    # Do we receive quoted or raw addresses from the helper program?
    # (does not apply to SMTP; defaults to true)
    #$gets_addr_in_quoted_form = 1; # "Bob \"Funny\" Dude"@example.com
    #$gets_addr_in_quoted_form = 0; # Bob "Funny" [email protected]
    # SMTP SERVER (INPUT) PROTOCOL SETTINGS (e.g. with Postfix, Exim v4, ...)
    # (used when MTA is configured to pass mail to amavisd via SMTP or LMTP)
    $inet_socket_port = 10024; # accept SMTP on this local TCP port
    # (default is undef, i.e. disabled)
    # multiple ports may be provided: $inet_socket_port = [10024, 10026, 10028];
    # SMTP SERVER (INPUT) access control
    # - do not allow free access to the amavisd SMTP port !!!
    # when MTA is at the same host, use the following (one or the other or both):
    #$inet_socket_bind = '127.0.0.1'; # limit socket bind to loopback interface
    # (default is '127.0.0.1')
    @inet_acl = qw( 127.0.0.1 ); # allow SMTP access only from localhost IP
    # (default is qw( 127.0.0.1 ) )
    # when MTA (one or more) is on a different host, use the following:
    #@inet_acl = qw(127/8 10.1.0.1 10.1.0.2); # adjust the list as appropriate
    #$inet_socket_bind = undef; # bind to all IP interfaces
    # Example1:
    # @inet_acl = qw( 127/8 10/8 172.16/12 192.168/16 );
    # permit only SMTP access from loopback and rfc1918 private address space
    # Example2:
    # @inet_acl = qw( !192.168.1.12 172.16.3.3 !172.16.3/255.255.255.0
    # 127.0.0.1 10/8 172.16/12 192.168/16 );
    # matches loopback and rfc1918 private address space except host 192.168.1.12
    # and net 172.16.3/24 (but host 172.16.3.3 within 172.16.3/24 still matches)
    # Example3:
    # @inet_acl = qw( 127/8
    # !172.16.3.0 !172.16.3.127 172.16.3.0/25
    # !172.16.3.128 !172.16.3.255 172.16.3.128/25 );
    # matches loopback and both halves of the 172.16.3/24 C-class,
    # split into two subnets, except all four broadcast addresses
    # for these subnets
    # See README.lookups for details on specifying access control lists.
    # Section III - Logging
    # true (e.g. 1) => syslog; false (e.g. 0) => logging to file
    $DO_SYSLOG = 0; # (defaults to false)
    #$SYSLOG_LEVEL = 'user.info'; # (defaults to 'mail.info')
    # Log file (if not using syslog)
    $LOGFILE = "/var/log/amavis.log"; # (defaults to empty, no log)
    #NOTE: levels are not strictly observed and are somewhat arbitrary
    # 0: startup/exit/failure messages, viruses detected
    # 1: args passed from client, some more interesting messages
    # 2: virus scanner output, timing
    # 3: server, client
    # 4: decompose parts
    # 5: more debug details
    $log_level = 4; # (defaults to 0)
    # Customizeable template for the most interesting log file entry (e.g. with
    # $log_level=0) (take care to properly quote Perl special characters like '\')
    # For a list of available macros see README.customize .
    # only log infected messages (useful with log level 0):
    # $log_templ = '[? %#V |[? %#F ||banned filename ([%F|,])]|infected ([%V|,])]#
    # [? %#V |[? %#F ||, from=<%o>, to=[<%R>|,][? %i ||, quarantine %i]]#
    # |, from=<%o>, to=[<%R>|,][? %i ||, quarantine %i]]';
    # log both infected and noninfected messages (default):
    $log_templ = '[? %#V |[? %#F |[?%#D|Not-Delivered|Passed]|BANNED name/type (%F)]|INFECTED (%V)], #
    <%o> -> [<%R>|,][? %i ||, quarantine %i], Message-ID: %m, Hits: %c';
    # Section IV - Notifications/DSN, BOUNCE/REJECT/DROP/PASS destiny, quarantine
    # Select notifications text encoding when Unicode-aware Perl is converting
    # text from internal character representation to external encoding (charset
    # in MIME terminology)
    # to be used in RFC 2047-encoded header field bodies, e.g. in Subject:
    #$hdr_encoding = 'iso-8859-1'; # (default: 'iso-8859-1')
    # to be used in notification body text: its encoding and Content-type.charset
    #$bdy_encoding = 'iso-8859-1'; # (default: 'iso-8859-1')
    # Default template texts for notifications may be overruled by directly
    # assigning new text to template variables, or by reading template text
    # from files. A second argument may be specified in a call to read_text(),
    # specifying character encoding layer to be used when reading from the
    # external file, e.g. 'utf8', 'iso-8859-1', or often just $bdy_encoding.
    # Text will be converted to internal character representation by Perl 5.8.0
    # or later; second argument is ignored otherwise. See PerlIO::encoding,
    # Encode::PerlIO and perluniintro man pages.
    # $notify_sender_templ = read_text('/var/amavis/notify_sender.txt');
    # $notify_virus_sender_templ= read_text('/var/amavis/notify_virus_sender.txt');
    # $notify_virus_admin_templ = read_text('/var/amavis/notify_virus_admin.txt');
    # $notify_virus_recips_templ= read_text('/var/amavis/notify_virus_recips.txt');
    # $notify_spam_sender_templ = read_text('/var/amavis/notify_spam_sender.txt');
    # $notify_spam_admin_templ = read_text('/var/amavis/notify_spam_admin.txt');
    # If notification template files are collectively available in some directory,
    # use read_l10n_templates which calls read_text for each known template.
    # read_l10n_templates('/etc/amavis/en_US');
    # Here is an overall picture (sequence of events) of how pieces fit together
    # (only virus controls are shown, spam controls work the same way):
    # bypass_virus_checks set for all recipients? ==> PASS
    # no viruses? ==> PASS
    # log virus if $log_templ is nonempty
    # quarantine if $virus_quarantine_to is nonempty
    # notify admin if $virus_admin (lookup) nonempty
    # notify recips if $warnvirusrecip and (recipient is local or $warn_offsite)
    # add address extensions for local recipients (when enabled)
    # send (non-)delivery notifications
    # to sender if DSN needed (BOUNCE) or ($warnvirussender and D_PASS)
    # virus_lovers or final_destiny==D_PASS ==> PASS
    # DISCARD (2xx) or REJECT (5xx) (depending on final_*_destiny)
    # Equivalent flow diagram applies for spam checks.
    # If a virus is detected, spam checking is skipped entirely.
    # The following symbolic constants can be used in *destiny settings:
    # D_PASS mail will pass to recipients, regardless of bad contents;
    # D_DISCARD mail will not be delivered to its recipients, sender will NOT be
    # notified. Effectively we lose mail (but will be quarantined
    # unless disabled). Not a decent thing to do for a mailer.
    # D_BOUNCE mail will not be delivered to its recipients, a non-delivery
    # notification (bounce) will be sent to the sender by amavisd-new;
    # Exception: bounce (DSN) will not be sent if a virus name matches
    # $viruses_that_fake_sender_re, or to messages from mailing lists
    # (Precedence: bulk|list|junk);
    # D_REJECT mail will not be delivered to its recipients, sender should
    # preferably get a reject, e.g. SMTP permanent reject response
    # (e.g. with milter), or non-delivery notification from MTA
    # (e.g. Postfix). If this is not possible (e.g. different recipients
    # have different tolerances to bad mail contents and not using LMTP)
    # amavisd-new sends a bounce by itself (same as D_BOUNCE).
    # Notes:
    # D_REJECT and D_BOUNCE are similar, the difference is in who is responsible
    # for informing the sender about non-delivery, and how informative
    # the notification can be (amavisd-new knows more than MTA);
    # With D_REJECT, MTA may reject original SMTP, or send DSN (delivery status
    # notification, colloquially called 'bounce') - depending on MTA;
    # Best suited for sendmail milter, especially for spam.
    # With D_BOUNCE, amavisd-new (not MTA) sends DSN (can better explain the
    # reason for mail non-delivery, but unable to reject the original
    # SMTP session). Best suited to reporting viruses, and for Postfix
    # and other dual-MTA setups, which can't reject original client SMTP
    # session, as the mail has already been enqueued.
    $final_virus_destiny = D_BOUNCE; # (defaults to D_BOUNCE)
    $final_banned_destiny = D_BOUNCE; # (defaults to D_BOUNCE)
    $final_spam_destiny = D_PASS; # (defaults to D_REJECT)
    $final_bad_header_destiny = D_PASS; # (defaults to D_PASS), D_BOUNCE suggested
    # Alternatives to consider for spam:
    # - use D_PASS if clients will do filtering based on inserted mail headers;
    # - use D_DISCARD, if kill_level is set safely high;
    # - use D_BOUNCE instead of D_REJECT if not using milter;
    # There are no sensible alternatives to D_BOUNCE for viruses, but consider:
    # - use D_PASS (or virus_lovers) and $warnvirussender=1 to deliver viruses;
    # - use D_REJECT instead of D_BOUNCE if using milter and under heavy
    # virus storm;
    # Don't bother to set both D_DISCARD and $warn*sender=1, it will get mapped
    # to D_BOUNCE.
    # The separation of *_destiny values into D_BOUNCE, D_REJECT, D_DISCARD
    # and D_PASS made settings $warnvirussender and $warnspamsender only still
    # useful with D_PASS.
    # The following $warn*sender settings are ONLY used when mail is
    # actually passed to recipients ($final_*_destiny=D_PASS, or *_lovers*).
    # Bounces or rejects produce non-delivery status notification anyway.
    # Notify virus sender?
    #$warnvirussender = 1; # (defaults to false (undef))
    # Notify spam sender?
    #$warnspamsender = 1; # (defaults to false (undef))
    # Notify sender of banned files?
    #$warnbannedsender = 1; # (defaults to false (undef))
    # Notify sender of syntactically invalid header containing non-ASCII characters?
    #$warnbadhsender = 1; # (defaults to false (undef))
    # Notify virus (or banned files) RECIPIENT?
    # (not very useful, but some policies demand it)
    #$warnvirusrecip = 1; # (defaults to false (undef))
    #$warnbannedrecip = 1; # (defaults to false (undef))
    # Notify also non-local virus/banned recipients if $warn*recip is true?
    # (including those not matching local_domains*)
    #$warn_offsite = 1; # (defaults to false (undef), i.e. only notify locals)
    # Treat envelope sender address as unreliable and don't send sender
    # notification / bounces if name(s) of detected virus(es) match the list.
    # Note that virus names are supplied by external virus scanner(s) and are
    # not standardized, so virus names may need to be adjusted.
    # See README.lookups for syntax.
    $viruses_that_fake_sender_re = new_RE(
    qr'nimda|hybris|klez|bugbear|yaha|braid|sobig|fizzer|palyh|peido|holar'i );
    # where to send ADMIN VIRUS NOTIFICATIONS (should be a fully qualified address)
    # - the administrator address may be a simple fixed e-mail address (a scalar),
    # or may depend on the SENDER address (e.g. its domain), in which case
    # a ref to a hash table can be specified (specify lower-cased keys,
    # dot is a catchall, see README.lookups).
    # Empty or undef lookup disables virus admin notifications.
    $virus_admin = '[email protected]';
    # $virus_admin = undef; # do not send virus admin notifications (default)
    # $virus_admin = {'not.example.com' => '', '.' => '[email protected]'};
    # $virus_admin = '[email protected]';
    # equivalent to $virus_admin, but for spam admin notifications:
    #$spam_admin = '[email protected]';# $spam_admin = undef; # do not send spam admin notifications (default)
    # $spam_admin = {'not.example.com' => '', '.' => '[email protected]'};
    #advanced example, using a hash lookup table:
    # - $virus_admin = {
    # '[email protected]' => '[email protected]',
    # '.sub1.example.com' => '[email protected]',
    # '.sub2.example.com' => '', # don't send admin notifications
    # 'a.sub3.example.com' => '[email protected]',
    # '.sub3.example.com' => '[email protected]',
    # '.example.com' => '[email protected]', # catchall for our virus senders
    # '.' => '[email protected]', # catchall for the rest
    # whom notification reports are sent from (ENVELOPE SENDER);
    # may be a null reverse path, or a fully qualified address:
    # (admin and recip sender addresses default to $mailfrom
    # for compatibility, which in turn defaults to undef (empty) )
    # If using strings in double quotes, don't forget to quote @, i.e. \@
    $mailfrom_notify_admin = "virusalert\@$mydomain";
    $mailfrom_notify_recip = "virusalert\@$mydomain";
    $mailfrom_notify_spamadmin = "spam.police\@$mydomain";
    # 'From' HEADER FIELD for sender and admin notifications.
    # This should be a replyable address, see rfc1894. Not to be confused
    # with $mailfrom_notify_sender, which is the envelope address and
    # should be empty (null reverse path) according to rfc2821.
    # $hdrfrom_notify_sender = "amavisd-new <postmaster\@$mydomain>";
    # $hdrfrom_notify_sender = 'amavisd-new <[email protected]>';
    # (defaults to: "amavisd-new <postmaster\@$myhostname>")
    # $hdrfrom_notify_admin = $mailfrom_notify_admin;
    # (defaults to: $mailfrom_notify_admin)
    # $hdrfrom_notify_spamadmin = $mailfrom_notify_spamadmin;
    # (defaults to: $mailfrom_notify_spamadmin)
    # whom quarantined messages appear to be sent from (envelope sender)
    $mailfrom_to_quarantine = undef; # original sender if undef, or set explicitly
    # (default is undef)
    # Location to put infected mail into: (applies to 'local:' quarantine method)
    # empty for not quarantining, may be a file (mailbox),
    # or a directory (no trailing slash)
    # (the default value is undef, meaning no quarantine)
    $QUARANTINEDIR = '/var/virusmails';
    #$virus_quarantine_method = "local:virus-%i-%n"; # default
    #$spam_quarantine_method = "local:spam-%b-%i-%n"; # default
    #use the new 'bsmtp:' method as an alternative to the default 'local:'
    #$virus_quarantine_method = "bsmtp:$QUARANTINEDIR/virus-%i-%n.bsmtp";
    #$spam_quarantine_method = "bsmtp:$QUARANTINEDIR/spam-%b-%i-%n.bsmtp";
    # When using the 'local:' quarantine method (default), the following applies:
    # A finer control of quarantining is available through variable
    # $virus_quarantine_to/$spam_quarantine_to. It may be a simple scalar string,
    # or a ref to a hash lookup table, or a regexp lookup table object,
    # which makes possible to set up per-recipient quarantine addresses.
    # The value of scalar $virus_quarantine_to/$spam_quarantine_to (or a
    # per-recipient lookup result from the hash table %$virus_quarantine_to)
    # is/are interpreted as follows:
    # VARIANT 1:
    # empty or undef disables quarantine;
    # VARIANT 2:
    # a string NOT containg an '@';
    # amavisd will behave as a local delivery agent (LDA) and will quarantine
    # viruses to local files according to hash %local_delivery_aliases (pseudo
    # aliases map) - see subroutine mail_to_local_mailbox() for details.
    # Some of the predefined aliases are 'virus-quarantine' and 'spam-quarantine'.
    # Setting $virus_quarantine_to ($spam_quarantine_to) to this string will:
    # * if $QUARANTINEDIR is a directory, each quarantined virus will go
    # to a separate file in the $QUARANTINEDIR directory (traditional
    # amavis style, similar to maildir mailbox format);
    # * otherwise $QUARANTINEDIR is treated as a file name of a Unix-style
    # mailbox. All quarantined messages will be appended to this file.
    # Amavisd child process must obtain an exclusive lock on the file during
    # delivery, so this may be less efficient than using individual files
    # or forwarding to MTA, and it may not work across NFS or other non-local
    # file systems (but may be handy for pickup of quarantined files via IMAP
    # for example);
    # VARIANT 3:
    # any email address (must contain '@').
    # The e-mail messages to be quarantined will be handed to MTA
    # for delivery to the specified address. If a recipient address local to MTA
    # is desired, you may leave the domain part empty, e.g. 'infected@', but the
    # '@' character must nevertheless be included to distinguish it from variant 2.
    # This method enables more refined delivery control made available by MTA
    # (e.g. its aliases file, other local delivery agents, dealing with
    # privileges and file locking when delivering to user's mailbox, nonlocal
    # delivery and forwarding, fan-out lists). Make sure the mail-to-be-quarantined
    # will not be handed back to amavisd for checking, as this will cause a loop
    # (hopefully broken at some stage)! If this can be assured, notifications
    # will benefit too from not being unecessarily virus-scanned.
    # By default this is safe to do with Postfix and Exim v4 and dual-sendmail
    # setup, but probably not safe with sendmail milter interface without
    # precaution.
    # (the default value is undef, meaning no quarantine)
    #$virus_quarantine_to = '[email protected]'; # traditional local quarantine
    #$virus_quarantine_to = 'infected@'; # forward to MTA for delivery
    #$virus_quarantine_to = "virus-quarantine\@$mydomain"; # similar
    #$virus_quarantine_to = '[email protected]'; # similar
    #$virus_quarantine_to = undef; # no quarantine
    #$virus_quarantine_to = new_RE( # per-recip multiple quarantines
    # [qr'^user@example\.com$'i => 'infected@'],
    # [qr'^(.*)@example\.com$'i => 'virus-${1}@example.com'],
    # [qr'^(.*)(@[^@])?$'i => 'virus-${1}${2}'],
    # [qr/.*/ => 'virus-quarantine'] );
    # similar for spam
    # (the default value is undef, meaning no quarantine)
    #$spam_quarantine_to = '[email protected]';
    #$spam_quarantine_to = "spam-quarantine\@$mydomain";
    #$spam_quarantine_to = new_RE( # per-recip multiple quarantines
    # [qr'^(.*)@example\.com$'i => 'spam-${1}@example.com'],
    # [qr/.*/ => 'spam-quarantine'] );
    # In addition to per-recip quarantine, a by-sender lookup is possible. It is
    # similar to $spam_quarantine_to, but the lookup key is the sender address:
    #$spam_quarantine_bysender_to = undef; # dflt: no by-sender spam quarantine
    # Add X-Virus-Scanned header field to mail?
    $X_HEADER_TAG = 'X-Virus-Scanned'; # (default: undef)
    # Leave empty to add no header field # (default: undef)
    $X_HEADER_LINE = "by amavisd-new at $mydomain";
    $remove_existing_x_scanned_headers = 0; # leave existing X-Virus-Scanned alone
    #$remove_existing_x_scanned_headers= 1; # remove existing headers
    # (defaults to false)
    $remove_existing_spam_headers = 0; # leave existing X-Spam* headers alone
    #$remove_existing_spam_headers = 1; # remove existing spam headers if
    # spam scanning is enabled (default)
    # set $bypass_decode_parts to true if you only do spam scanning, or if you
    # have a good virus scanner that can deal with compression and recursively
    # unpacking archives by itself, and save amavisd the trouble.
    # Disabling decoding also causes banned_files checking to only see
    # MIME names and MIME content types, not the content classification types
    # as provided by the file(1) utility.
    # It is a double-edged sword, make sure you know what you are doing!
    #$bypass_decode_parts = 1; # (defaults to false)
    # don't trust this file type or corresponding unpacker for this file type,
    # keep both the original and the unpacked file
    # (lookup key is what file(1) utility returned):
    $keep_decoded_original_re = new_RE(
    qr'^(ASCII|text|uuencoded|xxencoded|binhex)'i,
    # Checking for banned MIME types and names. If any mail part matches,
    # the whole mail is rejected, much like the way viruses are handled.
    # A list in object $banned_filename_re can be defined to provide a list
    # of Perl regular expressions to be matched against each part's:
    # * Content-Type value (both declared and effective mime-type),
    # including the possible security risk content types
    # message/partial and message/external-body, as specified by rfc2046;
    # * declared (recommended) file names as specified by MIME subfields
    # Content-Disposition.filename and Content-Type.name, both in their
    # raw (encoded) form and in rfc2047-decoded form if applicable;
    # * file content type as guessed by 'file(1)' utility, both the raw result
    # from file(1), as well as short type name, classified into names such as
    # .asc, .txt, .html, .doc, .jpg, .pdf, .zip, .exe, ..., which is always
    # beginning with a dot - see subroutine determine_file_types().
    # This step is done only if $bypass_decode_parts is not true.
    # * leave $banned_filename_re undefined to disable these checks
    # (giving an empty list to new_RE() will also always return false)
    $banned_filename_re = new_RE(
    qr'\.[a-zA-Z][a-zA-Z0-9]{0,3}\.(vbs|pif|scr|bat|com|exe|dll)$'i, # double extension
    # qr'.\.(exe|vbs|pif|scr|bat|com)$'i, # banned extension - basic
    # qr'.\.(ade|adp|bas|bat|chm|cmd|com|cpl|crt|exe|hlp|hta|inf|ins|isp|js|
    # jse|lnk|mdb|mde|msc|msi|msp|mst|pcd|pif|reg|scr|sct|shs|shb|vb|
    # vbe|vbs|wsc|wsf|wsh)$'ix, # banned extension - long
    # qr'^\.(exe|zip|lha|tnef)$'i, # banned file(1) types
    # qr'^application/x-msdownload$'i, # banned MIME types
    # qr'^message/partial$'i, qr'^message/external-body$'i, # rfc2046
    # See http://support.microsoft.com/default.aspx?scid=kb;EN-US;q262631
    # and http://www.cknow.com/vtutor/vtextensions.htm
    # A little trick: a pattern qr'\.exe$' matches both a short type name '.exe',
    # as well as any file name which happens to end with .exe. If only matching
    # a file name is desired, but not the short name, a pattern qr'.\.exe$'i
    # or similar may be used, which requires that at least one character preceeds
    # the '.exe', and so it will never match short file types, which always start
    # with a dot.
    # Section V - Per-recipient and per-sender handling, whitelisting, etc.
    # %virus_lovers, @virus_lovers_acl and $virus_lovers_re lookup tables:
    # (these should be considered policy options, they do not disable checks,
    # see bypas*checks for that!)
    # Exclude certain RECIPIENTS from virus filtering by adding their lower-cased
    # envelope e-mail address (or domain only) to the hash %virus_lovers, or to
    # the access list @virus_lovers_acl - see README.lookups and examples.
    # Make sure the appropriate form (e.g. external/internal) of address
    # is used in case of virtual domains, or when mapping external to internal
    # addresses, etc. - this is MTA-specific.
    # Notifications would still be generated however (see the overall
    # picture above), and infected mail (if passed) gets additional header:
    # X-AMaViS-Alert: INFECTED, message contains virus: ...
    # (header not inserted with milter interface!)
    # NOTE (milter interface only): in case of multiple recipients,
    # it is only possible to drop or accept the message in its entirety - for all
    # recipients. If all of them are virus lovers, we'll accept mail, but if
    # at least one recipient is not a virus lover, we'll discard the message.
    # %bypass_virus_checks, @bypass_virus_checks_acl and $bypass_virus_checks_re
    # lookup tables:
    # (this is mainly a time-saving option, unlike virus_lovers* !)
    # Similar in concept to %virus_lovers, a hash %bypass_virus_checks,
    # access list @bypass_virus_checks_acl and regexp list $bypass_virus_checks_re
    # are used to skip entirely the decoding, unpacking and virus checking,
    # but only if ALL recipients match the lookup.
    # %bypass_virus_checks/@bypass_virus_checks_acl/$bypass_virus_checks_re
    # do NOT GUARANTEE the message will NOT be checked for viruses - this may
    # still happen when there is more than one recipient for a message, and
    # not all of them match these lookup tables. To guarantee virus delivery,
    # a recipient must also match %virus_lovers/@virus_lovers_acl lookups
    # (but see milter limitations above),
    # NOTE: it would not be clever to base virus checks on SENDER address,
    # since there are no guarantees that it is genuine. Many viruses
    # and spam messages fake sender address. To achieve selective filtering
    # based on the source of the mail (e.g. IP address, MTA port number, ...),
    # use mechanisms provided by MTA if available.
    # Similar to lookup tables controlling virus checking, there exist
    # spam scanning, banned names/types, and headers_checks control counterparts:
    # %spam_lovers, @spam_lovers_acl, $spam_lovers_re
    # %banned_files_lovers, @banned_files_lovers_acl, $banned_files_lovers_re
    # %bad_header_lovers, @bad_header_lovers_acl, $bad_header_lovers_re
    # and:
    # %bypass_spam_checks/@bypass_spam_checks_acl/$bypass_spam_checks_re
    # %bypass_banned_checks/@bypass_banned_checks_acl/$bypass_banned_checks_re
    # %bypass_header_checks/@bypass_header_checks_acl/$bypass_header_checks_re
    # See README.lookups for details about the syntax.
    # The following example disables spam checking altogether,
    # since it matches any recipient e-mail address (any address
    # is a subdomain of the top-level root DNS domain):
    # @bypass_spam_checks_acl = qw( . );
    # @bypass_header_checks_acl = qw( [email protected] );
    # @bad_header_lovers_acl = qw( [email protected] );
    # See README.lookups for further detail, and examples below.
    # $virus_lovers{lc("postmaster\@$mydomain")} = 1;
    # $virus_lovers{lc('[email protected]')} = 1;
    # $virus_lovers{lc('[email protected]')} = 1;
    # $virus_lovers{lc('some.user@')} = 1; # this recipient, regardless of domain
    # $virus_lovers{lc('[email protected]')} = 0; # never, even if domain matches
    # $virus_lovers{lc('example.com')} = 1; # this domain, but not its subdomains
    # $virus_lovers{lc('.example.com')}= 1; # this domain, including its subdomains
    #or:
    # @virus_lovers_acl = qw( [email protected] !lab.xxx.com .xxx.com yyy.org );
    # $bypass_virus_checks{lc('[email protected]')} = 1;
    # @bypass_virus_checks_acl = qw( some.ddd !butnot.example.com .example.com );
    # @virus_lovers_acl = qw( [email protected] );
    # $virus_lovers_re = new_RE( qr'(helpdesk|postmaster)@example\.com$'i );
    # $spam_lovers{lc("postmaster\@$mydomain")} = 1;
    # $spam_lovers{lc('[email protected]')} = 1;
    # $spam_lovers{lc('[email protected]')} = 1;
    # @spam_lovers_acl = qw( !.example.com );
    # $spam_lovers_re = new_RE( qr'^user@example\.com$'i );
    # don't run spam check for these RECIPIENT domains:
    # @bypass_spam_checks_acl = qw( d1.com .d2.com a.d3.com );
    # or the other way around (bypass check for all BUT these):
    # @bypass_spam_checks_acl = qw( !d1.com !.d2.com !a.d3.com . );
    # a practical application: don't check outgoing mail for spam:
    # @bypass_spam_checks_acl = ( "!.$mydomain", "." );
    # (a downside of which is that such mail will not count as ham in SA bayes db)
    # Where to find SQL server(s) and database to support SQL lookups?
    # A list of triples: (dsn,user,passw). (dsn = data source name)
    # Specify more than one for multiple (backup) SQL servers.
    # See 'man DBI', 'man DBD::mysql', 'DBD::Pg', ... for details.
    # @lookup_sql_dsn =
    # ( ['DBI:mysql:mail:host1', 'some-username1', 'some-password1'],
    # ['DBI:mysql:mail:host2', 'some-username2', 'some-password2'] );
    # ('mail' in the example is the database name, choose what you like)
    # With PostgreSQL the dsn (first element of the triple) may look like:
    # 'DBI:Pg:host=host1;dbname=mail'
    # The SQL select clause to fetch per-recipient policy settings.
    # The %k will be replaced by a comma-separated list of query addresses
    # (e.g. full address, domain only, catchall). Use ORDER, if there
    # is a chance that multiple records will match - the first match wins.
    # If field names are not unique (e.g. 'id'), the later field overwrites the
    # earlier in a hash returned by lookup, which is why we use '*,users.id'.
    # No need to uncomment the following assignment if the default is ok.
    # $sql_select_policy = 'SELECT *,users.id FROM users,policy'.
    # ' WHERE (users.policy_id=policy.id) AND (users.email IN (%k))'.
    # ' ORDER BY users.priority DESC';
    # The SQL select clause to check sender in per-recipient whitelist/blacklist
    # The first SELECT argument '?' will be users.id from recipient SQL lookup,
    # the %k will be sender addresses (e.g. full address, domain only, catchall).
    # The default value is:
    # $sql_select_white_black_list = 'SELECT wb FROM wblist,mailaddr'.
    # ' WHERE (rid=?) AND (sid=mailaddr.id) AND (mailaddr.email IN (%k))'.
    # ' ORDER BY mailaddr.priority DESC';
    # To disable SQL white/black list, set to undef (otherwise comment-out
    # the following statement, leaving it at the default value):
    $sql_select_white_black_list = undef; # undef disables SQL white/blacklisting
    # If you decide to pass viruses (or spam) to certain recipients using the
    # above lookup tables or using $final_virus_destiny=1, you can set
    # the variable $addr_extension_virus ($addr_extension_spam) to some
    # string, and the recipient address will have this string appended
    # as an address extension to the local-part of the address. This extension
    # can be used by final local delivery agent to place such mail in different
    # folders. Leave these two variables undefined or empty strings to prevent
    # appending address extensions. Setting has no effect on recipient which will
    # not be receiving viruses/spam. Recipients who do not match lookup tables
    # local_domains* are not affected.
    # LDAs usually default to stripping away address extension if no special
    # handling is specified, so having this option enabled normally does no harm,
    # provided the $recipients_delimiter matches the setting on the final
    # MTA's LDA.
    # $addr_extension_virus = 'virus'; # (default is undef, same as empty)
    # $addr_extension_spam = 'spam'; # (default is undef, same as empty)
    # $addr_extension_banned = 'banned'; # (default is undef, same as empty)
    # Delimiter between local part of the recipient address and address extension
    # (which can optionally be added, see variables $addr_extension_virus and
    # $addr_extension_spam). E.g. recipient address <[email protected]> gets changed
    # to <[email protected]>.
    # Delimiter should match equivalent (final) MTA delimiter setting.
    # (e.g. for Postfix add 'recipient_delimiter = +' to main.cf)
    # Setting it to an empty string or to undef disables this feature
    # regardless of $addr_extension_virus and $addr_extension_spam settings.
    $recipient_delimiter = '+'; # (default is '+')
    # true: replace extension; false: append extension
    # $replace_existing_extension = 1; # (default is false)
    # Affects matching of localpart of e-mail addresses (left of '@')
    # in lookups: true = case sensitive, false = case insensitive
    $localpart_is_case_sensitive = 0; # (default is false)
    # ENVELOPE SENDER WHITELISTING / BLACKLISTING - GLOBAL (RECIPIENT-INDEPENDENT)
    # WHITELISTING: use ENVELOPE SENDER lookups to ENSURE DELIVERY from whitelisted
    # senders even if the message is recognized as spam. Effectively, for the
    # specified senders, message RECIPIENTS temporarily become 'spam_lovers', with
    # further processing being the same as otherwise specified for spam lovers.
    # It does not turn off inserting spam-related headers, if they are enabled.
    # BLACKLISTING: messages from specified SENDERS are DECLARED SPAM.
    # Effectively, for messages from blacklisted senders, spam level
    # is artificially pushed high, and the normal spam processing applies,
    # resulting in 'X-Spam-Flag: YES', high 'X-Spam-Level' bar and other usual
    # reactions to spam, including possible rejection. If the message nevertheless
    # still passes (e.g. for spam loving recipients), it is tagged as BLACKLISTED
    # in the 'X-Spam-Status' header field, but the reported spam value and
    # set of tests in this report header field (if available from SpamAssassin,
    # which may have not been called) is not adjusted.
    # A sender may be both white- and blacklisted at the same time,
    # settings are independent. For example, being both white- and blacklisted,
    # message is delivered to recipients, but is tagged as spam.
    # If ALL recipients of the message either white- or blacklist the sender,
    # spam scanning (calling the SpamAssassin) is bypassed, saving on time.
    # The following variables (lookup tables) are available, with the semantics
    # and syntax as specified in README.lookups:
    # %whitelist_sender, @whitelist_sender_acl, $whitelist_sender_re
    # %blacklist_sender, @blacklist_sender_acl, $blacklist_sender_re
    # SOME EXAMPLES:
    #ACL:
    # @whitelist_sender_acl = qw( .example.com );
    # @whitelist_sender_acl = ( ".$mydomain" ); # $mydomain and its subdomains
    # NOTE: This is not a reliable way of turning off spam checks for
    # locally-originating mail, as sender address can easily be faked.
    # To reliably avoid spam-scanning outgoing mail,
    # use @bypass_spam_checks_acl .
    #RE:
    # $whitelist_sender_re = new_RE(
    # qr'^postmaster@.*\bexample\.com$'i,
    # qr'^owner-[^@]*@'i, qr'-request@'i,
    # qr'\.example\.com$'i );
    $blacklist_sender_re = new_RE(
    qr'^(bulkmail|offers|cheapbenefits|earnmoney|foryou|greatcasino)@'i,
    qr'^(investments|lose_weight_today|market.alert|money2you|MyGreenCard)@'i,
    qr'^(new\.tld\.registry|opt-out|opt-in|optin|saveonlsmoking2002k)@'i,
    qr'^(specialoffer|specialoffers|stockalert|stopsnoring|wantsome)@'i,
    qr'^(workathome|yesitsfree|your_friend|greatoffers)@'i,
    qr'^(inkjetplanet|marketopt|MakeMoney)\d*@'i,
    #HASH lookup variant:
    # NOTE: Perl operator qw splits its argument string by whitespace
    # and produces a list. This means that addresses can not contain
    # whitespace, and there is no provision for comments within the string.
    # You can use the normal Perl list syntax if you have special requirements,
    # e.g. map {...} ('one user@bla', '.second.com'), or use read_hash to read
    # addresses from a file.
    # a hash lookup table can be read from a file,
    # one address per line, comments and empty lines are permitted:
    # read_hash(\%whitelist_sender, '/var/amavis/whitelist_sender');
    # ... or set directly:
    # $whitelist_sender{''} = 1; # don't spam-check MTA bounces
    map { $whitelist_sender{lc($_)}=1 } (qw(
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    returns.groups.yahoo.com
    # ENVELOPE SENDER WHITELISTING / BLACKLISTING - PER-RECIPIENT
    # The same semantics as for global white/blacklisting applies, but this
    # time each recipient (or its domain, or subdomain, ...) can be given
    # an individual lookup table for matching senders. The per-recipient lookups
    # override the global lookups, which serve as a fallback default.
    # Specify a two-level lookup table: the key for the outer table is recipient,
    # and the result should be an inner lookup table (hash or ACL or RE),
    # where the key used will be the sender.
    #$per_recip_blacklist_sender_lookup_tables = {
    # '[email protected]'=>new_RE(qr'^(inkjetplanet|marketopt|MakeMoney)\d*@'i),
    # '[email protected]'=>[qw( [email protected],org .d2.example,org )],
    #$per_recip_whitelist_sender_lookup_tables = {
    # '[email protected]' => [qw( [email protected] .other.example.org )],
    # '.my1.example.com' => [qw( !foe.other.example,org .other.example,org )],
    # '.my2.example.com' => read_hash('/var/amavis/my2-wl.dat'),
    # 'abuse@' => { 'postmaster@'=>1,
    # '[email protected]'=>1, '[email protected]'=>1 },
    # Section VI - Resource limits
    # Sanity limit to the number of allowed recipients per SMTP transaction
    # $smtpd_recipient_limit = 1000; # (default is 1000)
    # Resource limitations to protect against mail bombs (e.g. 42.zip)
    # Maximum recursion level for extraction/decoding (0 or undef disables limit)
    $MAXLEVELS = 14; # (default is undef, no limit)
    # Maximum number of extracted files (0 or undef disables the limit)
    $MAXFILES = 1500; # (default is undef, no limit)
    # For the cumulative total of all decoded mail parts we set max storage size
    # to defend against mail bombs. Even though parts may be deleted (replaced
    # by decoded text) during decoding, the size they occupied is _not_ returned
    # to the quota pool.
    # Parameters to storage quota formula for unpacking/decoding/decompressing
    # Formula:
    # quota = max($MIN_EXPANSION_QUOTA,
    # $mail_size*$MIN_EXPANSION_FACTOR,
    # min($MAX_EXPANSION_QUOTA, $mail_size*$MAX_EXPANSION_FACTOR))
    # In plain words (later condition overrules previous ones):
    # allow MAX_EXPANSION_FACTOR times initial mail size,
    # but not more than MAX_EXPANSION_QUOTA,
    # but not less than MIN_EXPANSION_FACTOR times initial mail size,
    # but never less than MIN_EXPANSION_QUOTA
    $MIN_EXPANSION_QUOTA = 100*1024; # bytes (default undef, not enforced)
    $MAX_EXPANSION_QUOTA = 300*1024*1024; # bytes (default undef, not enforced)
    $MIN_EXPANSION_FACTOR = 5; # times original mail size (must be specified)
    $MAX_EXPANSION_FACTOR = 500; # times original mail size (must be specified)
    # Section VII - External programs, virus scanners
    # Specify a path string, which is a colon-separated string of directories
    # (no trailing slashes!) to be assigned to the environment variable PATH
    # and to serve for locating external programs below.
    # NOTE: if $daemon_chroot_dir is nonempty, the directories will be
    # relative to the chroot directory specified;
    $path = '/usr/local/sbin:/usr/local/bin:/usr/sbin:/sbin:/usr/bin:/bin';
    # Specify one string or a search list of strings (first match wins).
    # The string (or: each string in a list) may be an absolute path,
    # or just a program name, to be located via $path;
    # Empty string or undef (=default) disables the use of that external program.
    # Optionally command arguments may be specified - only the first substring
    # up to the whitespace is used for file searching.
    $file = 'file'; # file(1) utility; use 3.41 or later to avoid vulnerability
    $gzip = 'gzip';
    $bzip2 = 'bzip2';
    $lzop = 'lzop';
    $uncompress = ['uncompress', 'gzip -d', 'zcat'];
    $unfreeze = ['unfreeze', 'freeze -d', 'melt', 'fcat'];
    $arc = ['nomarch', 'arc'];
    $unarj = ['arj', 'unarj']; # both can extract, same options
    $unrar = ['rar', 'unrar']; # both can extract, same options
    $zoo = 'zoo';
    $lha = 'lha';
    $cpio = 'cpio';
    # SpamAssassin settings
    # $sa_local_tests_only is passed to Mail::SpamAssassin::new as a value
    # of the option local_tests_only. See Mail::SpamAssassin man page.
    # If set to 1, no tests that require internet access will be performed.
    $sa_local_tests_only = 1; # (default: false)
    #$sa_auto_whitelist = 1; # turn on AWL (default: false)
    $sa_mail_body_size_limit = 64*1024; # don't waste time on SA if mail is larger
    # (less than 1% of spam is > 64k)
    # default: undef, no limitations
    # default values, can be overridden by more specific lookups, e.g. SQL
    $sa_tag_level_deflt = -999; # add spam info headers if at, or above that level
    $sa_tag2_level_deflt = 3.0; # add 'spam detected' headers at that level
    $sa_kill_level_deflt = 22.0;
    #$sa_kill_level_deflt = $sa_tag2_level_deflt; # triggers spam evasive actions
    # at or above that level: bounce/reject/drop,
    # quarantine, and adding mail address extension
    # The $sa_tag_level_deflt, $sa_tag2_level_deflt and $sa_kill_level_deflt
    # may also be hashrefs to hash lookup tables, to make static per-recipient
    # settings possible without having to resort to SQL or LDAP lookups.
    # a quick reference:
    # tag_level controls adding the X-Spam-Status and X-Spam-Level headers,
    # tag2_level controls adding 'X-Spam-Flag: YES', and editing Subject,
    # kill_level controls 'evasive actions' (reject, quarantine, extensions);
    # it only makes sense to maintain the relationship:
    # tag_level <= tag2_level <= kill_level
    # string to prepend to Subject header field when message exceeds tag2 level
    $sa_spam_subject_tag = '*** JUNK MAIL ***'; # (defaults to undef, disables)
    # (only seen when spam is not to be rejected
    # and recipient is in local_domains*)
    $sa_spam_modifies_subj = 1; # may be a ref to a lookup table, default is true
    # Example: modify Subject for all local recipients except [email protected]
    #$sa_spam_modifies_subj = [qw( [email protected] . )];
    # @av_scanners is a list of n-tuples, where fields semantics is:
    # 1. av scanner plain name, to be used in log and reports;
    # 2. scanner program name; this string will be submitted to subroutine
    # find_external_programs(), which will try to find the full program
    # path name; if program is not found, this scanner is disabled.
    # Besides a simple string (full program path name or just the basename
    # to be looked for in PATH), this may be an array ref of alternative
    # program names or full paths - the first match in the list will be used;
    # As a special case for more complex scanners, this field may be
    # a subroutine reference, and the whole n-tuple is passed to it as args.
    # 3. command arguments to be given to the scanner program;
    # a substring {} will be replaced by the directory name to be scanned,
    # i.e. "$tempdir/parts"
    # 4. an array ref of av scanner exit status values, or a regexp (to be
    # matched against scanner output), indicating NO VIRUSES found;
    # 5. an array ref of av scanner exit status values, or a regexp (to be
    # matched against scanner output), indicating VIRUSES WERE FOUND;
    # Note: the virus match prevails over a 'not found' match, so it is safe
    # even if 4. matches for viruses too;
    # 6. a regexp (to be matched against scanner output), returning a list
    # of virus names found.
    # 7. and 8.: (optional) subroutines to be executed before and after scanner
    # (e.g. to set environment or current directory);
    # see examples for these at KasperskyLab AVP and Sophos sweep.
    # NOTES:
    # - NOT DEFINING @av_scanners (e.g. setting it to empty list, or deleting the
    # whole assignment) TURNS OFF LOADING AND COMPILING OF THE ANTIVIRUS CODE
    # (which can be handy if all you want to do is spam scanning);
    # - the order matters: although _all_ available entries from the list are
    # always tried regardless of their verdict, scanners are run in the order
    # specified: the report from the first one detecting a virus will be used
    # (providing virus names and scanner output); REARRANGE THE ORDER TO WILL;
    # - it doesn't hurt to keep an unused command line scanner entry in the list
    # if the program can not be found; the path search is only performed once
    # during the program startup;
    # CORROLARY: to disable a scanner that _does_ exist on your system,
    # comment out its entry or use undef or '' as its program name/path
    # (second parameter). An example where this is almost a must: disable
    # Sophos 'sweep' if you have its daemonized version Sophie or SAVI-Perl
    # (same for Trophie/vscan, and clamd/clamscan), or if another unrelated
    # program happens to have a name matching one of the entries ('sweep'
    # again comes to mind);
    # - it DOES HURT to keep unwanted entries which use INTERNAL SUBROUTINES
    # for interfacing (where the second parameter starts with \&).
    # Keeping such entry and not having a corresponding virus scanner daemon
    # causes an unnecessary connection attempt (which eventually times out,
    # but it wastes precious time). For this reason the daemonized entries
    # are commented in the distribution - just remove the '#' where needed.
    @av_scanners = (
    # ### http://www.vanja.com/tools/sophie/
    # ['Sophie',
    # \&ask_daemon, ["{}/\n", '/var/run/sophie'],
    # qr/(?x)^ 0+ ( : | [\000\r\n]* $)/, qr/(?x)^ 1 ( : | [\000\r\n]* $)/,
    # qr/(?x)^ [-+]? \d+ : (.*?) [\000\r\n]* $/ ],
    # ### http://www.csupomona.edu/~henson/www/projects/SAVI-Perl/
    # ['Sophos SAVI', \&sophos_savi ],
    # ### http://clamav.elektrapro.com/
    # ['Clam Antivirus-clamd',
    # \&ask_daemon, ["CONTSCAN {}\n", '/var/amavis/clamd'],
    # qr/\bOK$/, qr/\bFOUND$/,
    # qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],
    # # NOTE: run clamd under the same user as amavisd,
    # # match the socket name in clamav.conf to the socket name in this entry
    # ### http://www.openantivirus.org/
    # ['OpenAntiVirus ScannerDaemon (OAV)',
    # \&ask_daemon, ["SCAN {}\n", '127.0.0.1:8127'],
    # qr/^OK/, qr/^FOUND: /, qr/^FOUND: (.+)/ ],
    # ### http://www.vanja.com/tools/trophie/
    # ['Trophie',
    # \&ask_daemon, ["{}/\n", '/var/run/trophie'],
    # qr/(?x)^ 0+ ( : | [\000\r\n]* $)/, qr/(?x)^ 1 ( : | [\000\r\n]* $)/,
    # qr/(?x)^ [-+]? \d+ : (.*?) [\000\r\n]* $/ ],
    # ### http://www.f-prot.com/
    # ['FRISK F-Prot Daemon',
    # \&ask_daemon,
    # ["GET {}/*?-dumb%20-archive HTTP/1.0\r\n\r\n",
    # ['127.0.0.1:10200','127.0.0.1:10201','127.0.0.1:10202',
    # '127.0.0.1:10203','127.0.0.1:10204'] ],
    # qr/(?i)<summary[^>]*>clean<\/summary>/,
    # qr/(?i)<summary[^>]*>infected<\/summary>/,
    # qr/(?i)<name>(.+)<\/name>/ ],
    ['KasperskyLab AntiViral Toolkit Pro (AVP)', ['avp','kavscanner'],
    "-* -P -B -Y -O- {}", [0,3,8], [2,4], # any use for -A -K ?
    qr/infected: (.+)/,
    sub {chdir('/opt/AVP') or die "Can't chdir to AVP: $!"},
    sub {chdir($TEMPBASE) or die "Can't chdir back to $TEMPBASE $!"},
    ['KasperskyLab AVPDaemonClient',
    [ '/opt/AVP/kavdaemon', 'kavdaemon',
    '/opt/AVP/AvpDaemonClient', 'AvpDaemonClient',
    '/opt/AVP/AvpTeamDream', 'AvpTeamDream',
    '/opt/AVP/avpdc', 'avpdc' ],
    '{}', [0,8], [3,4,5,6], qr/infected: ([^\r\n]+)/ ],
    # change the startup-script in /etc/init.d/kavd to:
    # DPARMS="-I0 -Y -* /var/amavis"
    # adjusting /var/amavis above to match your $TEMPBASE.
    # NOTE: cd /opt/AVP/DaemonClients; configure; cd Sample; make
    # cp AvpDaemonClient /opt/AVP/
    ### http://www.hbedv.com/ or http://www.centralcommand.com/
    ['H+BEDV AntiVir or CentralCommand Vexira Antivirus',
    ['antivir','vexira'],
    '--allfiles -noboot -nombr -rs -s -z {}', [0], qr/ALERT:|VIRUS:/,
    qr/(?x)^\s* (?: ALERT: \s* (?: \[ | [^']* ' ) |
    (?i) VIRUS:\ .*?\ virus\ '?) ( [^\]\s']+ )/ ],
    # NOTE: remove the -z if you only have a demo version
    ### http://www.commandsoftware.com/
    ['Command AntiVirus for Linux', 'csav',
    '-all -archive -packed {}', [50], [51,52,53],
    qr/Infection: (.+)/ ],
    ### http://www.symantec.com/
    ['Symantec CarrierScan via Symantec CommandLineScanner',
    ['cscmdline','savsecls'],
    '-a scan -i 1 -v -s 127.0.0.1:7777 {}',
    qr/Files Infected: 0/, qr/^Infected: /,
    qr/Info:\s+(.+)/ ],
    ### http://drweb.imshop.de/
    ['DrWeb Antivirus for Linux/FreeBSD/Solaris', 'drweb',
    '-al -ar -fm -go -ha -ml -ot -sd -up {}',
    [0], [1], sub {('no-name')} ],
    ### http://www.f-secure.com/products/anti-virus/
    ['F-Secure Antivirus', 'fsav',
    '--dumb --archive {}', [0], [3,8],
    qr/(?:infection|Infected): (.+)/ ],
    ['CAI InoculateIT', 'inocucmd',
    '-sec -nex {}', [0], [100],
    qr/was infected by virus (.+)/ ],
    ['MkS_Vir for Linux (beta)', ['mks32','mks'],
    '-s {}/*', [0], [1,2],
    qr/--[ \t]*(.+)/ ],
    ['MkS_Vir daemon',
    'mksscan', '-s -q {}', [0], [1..7],
    qr/^... (\S+)/ ],
    ### http://www.nod32.com/
    ['ESET Software NOD32', 'nod32',
    '-all -subdir+ {}', [0], [1,2],
    qr/^.+? - (.+?)\s*(?:backdoor|joke|trojan|virus|worm)/ ],
    ### http://www.nod32.com/
    ['ESET Software NOD32 - Client/Server Version', 'nod32cli',
    '-a -r -d recurse --heur standard {}', [0], [10,11],
    qr/^\S+\s+infected:\s+(.+)/ ],
    ### http://www.norman.com/products_nvc.shtml
    ['Norman Virus Control v5 / Linux', 'nvccmd',
    '-c -l:0 -s -u {}', [0], [1],
    qr/(?i).* virus in .* -> \'(.+)\'/ ],
    ### http://www.pandasoftware.com/
    ['Panda Antivirus for Linux', ['pavcl','pavc'],
    '-aut -aex -heu -cmp -nor -nso -eng {}',
    qr/Number of files infected\.*: 0(?!\d)/,
    qr/Number of files infected\.*: 0*[1-9]/,
    qr/Found virus :\s*(\S+)/ ],
    # Check your RAV license terms before fiddling with the following two lines!
    # ['GeCAD RAV AntiVirus 8', 'ravav',
    # '--all --archive --mail {}', [1], [2,3,4,

    You are welcome. I'm glad you got it back up.
    (1) You say you did the symbolic link. I will assume this is set correctly; it's very important that it is.
    (2) I don't know what you mean by "Been feeding the [email protected] for several weeks now, 700 emails each day at least." After the initial training period, SpamAssassin doesn't learn from mail it has already processed correctly. At this point, you only need to teach SpamAssassin when it is wrong. [email protected] should only be getting spam that is being passed as clean. Likewise, [email protected] should only be getting legitimate mail that is being flagged as junk. You are redirecting mail to both [email protected] and [email protected] ... right? SpamAssassin needs both.
    (3) Next, as I said before, you need to implement those "Frontline spam defense for Mac OS X Server." Once you have that done and issue "postfix reload" you can look at your SMTP log in Server Admin and watch as Postfix blocks one piece of junk mail after another. It's kind of cool.
    (4) Add some SARE rules:
    Visit http://www.rulesemporium.com/rules.htm and download the following rules:
    70sareadult.cf
    70saregenlsubj0.cf
    70sareheader0.cf
    70sarehtml0.cf
    70sareobfu0.cf
    70sareoem.cf
    70sarespoof.cf
    70sarestocks.cf
    70sareunsub.cf
    72sare_redirectpost
    Visit http://www.rulesemporium.com/other-rules.htm and download the following rules:
    backhair.cf
    bogus-virus-warnings.cf
    chickenpox.cf
    weeds.cf
    Copy these rules to /etc/mail/spamassassin/
    Then stop and restart mail services.
    There are other things you can do, and you'll find differing opinions about such things. In general, I think implementing the "Frontline spam defense for Mac OS X Server" and adding the SARE rules will help a lot. Good luck!

  • HDS live streaming to Flash not working

    Adobe Flash Media Server 4.5.5 r4013
    Windows 2008
    Sources:
    http://help.adobe.com/en_US/flashmediaserver/devguide/WSd391de4d9c7bd609-52e437a812a3725df a0-8000.html
    http://www.adobe.com/devnet/adobe-media-server/articles/live-multi-bitrate-video-http-flas h-ios.html
    Live streaming a single or multi-bitrate video over HTTP to Flash does not work. I have followed the instructions on the 2 sources listed above repeatedly, but I can’t get live streaming over HTTP to Flash to work. Live streaming to iOS over HTTP works with no problems (single and multi-bitrate streams).
    I have tried the troubleshooting steps from the following:
    http://help.adobe.com/en_US/flashmediaserver/devguide/WS0432746db30523c21e63e3d12efac195bd -8000.html
    Troubleshoot live streaming (HTTP)
    1.      Services window (Windows): Flash Media Server (FMS), Flash Media Administration Server, and FMSHttpd services are running. ✓
    2.      Verified that the request URL is correct. ✓
    3.      Configured ports:
    a.      Configure Apache to use port 80. Open rootinstall/Apache2.2/conf/httpd.conf in a text editor. Change the line Listen 8134 to Listen 80.
    b.     Configure Flash Media Server not to use port 80. Open rootinstall/conf/fms.ini in a text editor. Remove 80 from the ADAPTOR.HOSTPORT parameter so the parameter looks like the following: ADAPTOR.HOSTPORT = :1935 ✓
    4.      Placed a crossdomain.xml file to the rootinstall/webroot directory. ✓
    5.      In Flash Media Live Encoder, select the Encoding Options tab, choose Output from the Panel options menu, and verify the following:
    a) The value of FMS URL is rtmp://fms-dns-or-ip/livepkgr. If you’re testing on the same server as Flash Media Server, you can use the value localhost for fms-dns-or-ip. ✓
    b) For a single stream, the value of Stream is livestream?adbe-live-event=liveevent. ✓
    c) For adaptive bitrate streaming, the value of Stream is livestream%i?adbe-live-event=liveevent. ✓
    Flash Media Live Encoder uses this value to create unique stream names. To use another encoder, provide your own unique stream names, for example, livestream1?adbe-live-event=liveevent, livestream2?adbe-live-event=liveevent.
    The encoder is showing all 3 streams being published and streaming.
    6. Check Administration Console: the livepkgr application and the 3 streams are running. ✓
    7. Check the logs for errors. Flash Media Server logs are located in the rootinstall/logs folder. The master.xx.log file and the core.xx.log file show startup failures. Apache logs are located in the rootinstall/Apache2.2/logs folder. X
    a)   core00.log: these errors did not occur every time that I tried playing the live stream but these are the only relevant errors in the logs.
    1. 7968 (w)2611179     Warning from libf4f.dll: [Utils] [livestream2] Discarded all queued Media Messages received before first Video Keyframe Message
    2. 7968 (w)2611179     Warning from libf4f.dll: [Utils] [livestream3] Discarded all queued Media Messages received before first Video Keyframe Message
    b) edge00.log:
    13:33:57 4492          (w)2641213 Connection rejected by server. Reason : [ Server.Reject ] : (_defaultRoot_, _defaultVHost_) : Application (hds-live) is not defined.          -
    c) Apache-Error:
    1.     [warn]  Checking if stream is disabled but bootstrap path in event file is empty for event:livepkgr/events/_definst_/liveevent stream name:livestream
    2.     [warn] bootstrap path is in event file is empty for event:livepkgr/events/_definst_/liveevent stream name:livestream1
    As I mentioned, everything works on iOS and FMS seems to be creating all of the stream segments and meta files:
    a.     The 3 streams are being created in: HD:\Program Files\Adobe\Flash Media Server 4.5\applications\livepkgr\streams\_definst_
    b.    FMS is creating the following files in each stream folder (livestream1, livestream2, livestream 3):
    1. livestream1.bootstrap
    2. livestream1.control
    3. livestream1.meta
    4. .f4f segments
    5. .f4x segments
    The appropriate files are also being created in the HD:\Program Files\Adobe\Flash Media Server 4.5\applications\livepkgr\events\_definst_\liveevent folder, in which I have the following Manifest.xml and Event.xml files:
    <manifest xmlns="http://ns.adobe.com/f4m/1.0">
      <media streamId="livestream1" bitrate="200" />
      <media streamId="livestream2" bitrate="500" />
      <media streamId="livestream3" bitrate="1000" />
    </manifest>
    <Event>
      <EventID>liveevent</EventID>
      <Recording>
    <FragmentDuration>4000</FragmentDuration>
    <SegmentDuration>16000</SegmentDuration>
        <DiskManagementDuration>3</DiskManagementDuration>
      </Recording>
    </Event>
    I’ve tried clearing the contents of both streams\_definst_ and events\_definst_\liveevent (keeping the xml files) after restarting the encoder, and creating a different event definst for the streams (liveevent2 for example).
    We have an event in 2 weeks that we would like to stream to both Flash and iOS. Any help in solving this problem will be greatly appreciated.

    One step closer:
    Changed the crossdomain.xml file (more permissive settings).
    Changed the encoding on FMLE to vp6. Working somewhat (don't know what I did to make it start streaming through hds).
    But at least now I can get the individual streams in the set manifest file to work:
    http://localhost/hds-live/livepkgr/_definst_/livevent/livestream1.f4m
    http://localhost/hds-live/livepkgr/_definst_/livevent/livestream2.f4m
    http://localhost/hds-live/livepkgr/_definst_/livevent/livestream3.f4m
    BUT when I try to play the streams through the set manifest file from http://localhost/liveevent.f4m I'm getting the following error:
    "The F4m document contains errors URL missing from Media tag." I'll search the forums to see if anyone else has come across this problem.
    I used the f4m config tool to make the file. These are the file's contents:
    <manifest xmlns="http://ns.adobe.com/f4m/2.0">
      <baseURL>http://localhost/hds-live/livepkgr/_definst_/liveevent/</baseURL>
      <media href="livestream1.f4m " bitrate="200"/>
      <media href="livestream2.f4m " bitrate="500"/>
      <media href="livestream3.f4m " bitrate="1000"/>
    </manifest>
    Thanks

  • Last_page button is not working in table control-urgent

    hi  all,
    iam displaying the data in table control.in my pf-status i have first_page,next_page,prev_page and last_page.out of 4 buttons 3 buttons are working finr except last_page. any body can send me the code for this program.iam sending my program below.
    REPORT ZMAHI_TABLE_CONTROL .
    TABLES : VBAK,VBAP.
    DATA : BEGIN OF ITAB OCCURS 0,
             VBELN TYPE VBAK-VBELN,
             ERDAT TYPE VBAK-ERDAT,
             ERNAM TYPE VBAK-ERNAM,
             ERZET TYPE VBAK-ERZET,
             REASON(40) TYPE C,
           END OF ITAB.
    DATA :   FILL TYPE I VALUE 1.
    DATA : N TYPE I .
    DATA      : BEGIN OF XVALUES OCCURS 50,
                  BUTXT LIKE  T001-BUTXT,
                END OF XVALUES.
    DATA      : BEGIN OF XFIELDS OCCURS 50.
            INCLUDE STRUCTURE HELP_VALUE.
    DATA      : END OF XFIELDS.
    DATA      : BEGIN OF SEL_VAL OCCURS 50.
            INCLUDE STRUCTURE HELP_VTAB.
    DATA      : END OF SEL_VAL.
    TABLE CONTROL DECLARATIONS------
    CONTROLS : CONTROL_DATA TYPE TABLEVIEW USING  SCREEN '100'.
    DATA : OK_CODE TYPE SY-UCOMM,
    LIN TYPE I,
    LIN1 TYPE I,
    LIN2 TYPE I,
    LIN3 TYPE I.
    DATA: LINES TYPE I,
          LIMIT TYPE I VALUE 1.
    DATA :   LINE_COUNT       TYPE  I,
             LINEI            TYPE  I,
             LINEJ            TYPE  I,
             LINE1            TYPE  I,
             LINE2            TYPE  I,
             LN1              TYPE  I.
    SELECTION-SCREEN : BEGIN OF BLOCK B1.
    SELECT-OPTIONS   : P_VBELN FOR VBAK-VBELN.
    SELECTION-SCREEN : END OF BLOCK B1.
    START-OF-SELECTION.
      SELECT VBELN
             ERDAT
             ERNAM
             ERZET
        FROM VBAK
        INTO TABLE ITAB
      WHERE VBELN IN P_VBELN.
      CALL SCREEN 100.
    *&      Module  F4_HELP  INPUT
    MODULE F4_HELP INPUT.
      FREE  :  XFIELDS,SEL_VAL,XVALUES.
      MOVE : 'ZMAHI'     TO XFIELDS-TABNAME,
             'REASON'    TO XFIELDS-FIELDNAME,
             'X'        TO XFIELDS-SELECTFLAG.
      APPEND XFIELDS.
      XVALUES = 'Non Trade F&F'.
      APPEND XVALUES .
      XVALUES = 'Non Trade Retention'.
      APPEND XVALUES .
      XVALUES = 'Oldbills Accnt cntmnt'.
      APPEND XVALUES .
      XVALUES = 'Non Trade Not claimed'.
      APPEND XVALUES .
      XVALUES = 'Non Trade Dispute'.
      APPEND XVALUES .
      XVALUES = 'Non Trade Payment Block'.
      APPEND XVALUES .
      XVALUES = 'N/T Subsntly Cleared'.
      APPEND XVALUES .
      XVALUES = 'N/T Unstld Advances'.
      APPEND XVALUES .
      XVALUES = 'N/T OThers'.
      APPEND XVALUES .
      XVALUES = 'Trade Non Receipt OF BOE'.
      APPEND XVALUES .
      XVALUES = 'Trade OEM Adjustments'.
      APPEND XVALUES .
      XVALUES = 'Trade Reject Of Material'.
      APPEND XVALUES .
      XVALUES = 'Trade NOt Claimed'.
      APPEND XVALUES .
      XVALUES = 'Trade Dispute'.
      APPEND XVALUES .
      XVALUES = 'Trade Payment BLock'.
      APPEND XVALUES .
      XVALUES = 'Trade Subsntly Cleared'.
      APPEND XVALUES .
      XVALUES = 'Trade Non Submission of bills'.
      APPEND XVALUES .
      XVALUES = 'Trade others'.
      APPEND XVALUES .
      CALL FUNCTION 'HELP_VALUES_GET_WITH_TABLE_EXT'
           EXPORTING
                CUCOL         = 0
                CUROW         = 0
                DISPLAY       = ' '
                FIELDNAME     = 'REASON'
                TABNAME       = 'ZIFIOD011'
           IMPORTING
                SELECT_VALUE  = ITAB-REASON
           TABLES
                FIELDS        = XFIELDS
                SELECT_VALUES = SEL_VAL
                VALUETAB      = XVALUES.
    ENDMODULE.                 " F4_HELP  INPUT
    *&      Module  STATUS_0100  OUTPUT
    MODULE STATUS_0100 OUTPUT.
      SET PF-STATUS '0100'.
    ENDMODULE.                 " STATUS_0100  OUTPUT
    *&      Module  USER_COMMAND_0100  INPUT
    MODULE USER_COMMAND_0100 INPUT.
      CASE SY-UCOMM.
        WHEN 'CANCEL' OR 'EXIT' OR 'BACK'.
          LEAVE TO SCREEN 0.
       WHEN 'NEXT_LINE'.
         CONTROL_DATA-top_line = CONTROL_DATA-top_line + 1.
         limit = fill - lines + 1.
         IF CONTROL_DATA-top_line > limit.
           CONTROL_DATA-top_line = limit.
         ENDIF.
       WHEN 'PREV_LINE'.
         CONTROL_DATA-top_line = CONTROL_DATA-top_line - 1.
         IF CONTROL_DATA-top_line < 0.
           CONTROL_DATA-top_line = 0.
         ENDIF.
        WHEN 'NEXT_PAGE'.
          CONTROL_DATA-TOP_LINE = CONTROL_DATA-TOP_LINE + LINES.
          LIMIT = LIMIT + 1.
          CONTROL_DATA-TOP_LINE = LIMIT.
        WHEN 'PREV_PAGE'.
          CONTROL_DATA-TOP_LINE = CONTROL_DATA-TOP_LINE - LINES.
          LIMIT = LIMIT - 1.
          CONTROL_DATA-TOP_LINE = LIMIT.
       WHEN 'LAST_PAGE'.
         CONTROL_DATA-TOP_LINE =  FILL - LINES + 1.
        WHEN 'FIRST_PAGE'.
          CONTROL_DATA-TOP_LINE = 0.
      ENDCASE.
    ENDMODULE.                 " USER_COMMAND_0100  INPUT
    *&      Module  SCROLL_BAR  INPUT
    MODULE SCROLL_BAR INPUT.
      DESCRIBE  TABLE  ITAB  LINES  CONTROL_DATA-LINES.
    ENDMODULE.                 " SCROLL_BAR  INPUT
    thanks,
    maheedhar.T

    Hi Ravi,
    The code which u sent to me is not working for next page and previous page.
    can u plz resend me the code.
    iam sending my code below.
    REPORT ZMAHI_TABLE_CONTROL .
    TABLES : VBAK,VBAP.
    DATA : BEGIN OF ITAB OCCURS 0,
             VBELN TYPE VBAK-VBELN,
             ERDAT TYPE VBAK-ERDAT,
             ERNAM TYPE VBAK-ERNAM,
             ERZET TYPE VBAK-ERZET,
             REASON(40) TYPE C,
           END OF ITAB.
    DATA :   FILL TYPE I VALUE 1.
    DATA : N TYPE I .
    DATA      : BEGIN OF XVALUES OCCURS 50,
                  BUTXT LIKE  T001-BUTXT,
                END OF XVALUES.
    DATA      : BEGIN OF XFIELDS OCCURS 50.
            INCLUDE STRUCTURE HELP_VALUE.
    DATA      : END OF XFIELDS.
    DATA      : BEGIN OF SEL_VAL OCCURS 50.
            INCLUDE STRUCTURE HELP_VTAB.
    DATA      : END OF SEL_VAL.
    TABLE CONTROL DECLARATIONS------
    CONTROLS : CONTROL_DATA TYPE TABLEVIEW USING  SCREEN '100'.
    DATA : OK_CODE TYPE SY-UCOMM,
    LIN TYPE I,
    LIN1 TYPE I,
    LIN2 TYPE I,
    LIN3 TYPE I.
    DATA: LINES TYPE I,
          LIMIT TYPE I VALUE 1.
    DATA :   LINE_COUNT       TYPE  I,
             LINEI            TYPE  I,
             LINEJ            TYPE  I,
             LINE1            TYPE  I,
             LINE2            TYPE  I,
             LN1              TYPE  I.
    SELECTION-SCREEN : BEGIN OF BLOCK B1.
    SELECT-OPTIONS   : P_VBELN FOR VBAK-VBELN.
    SELECTION-SCREEN : END OF BLOCK B1.
    START-OF-SELECTION.
      SELECT VBELN
             ERDAT
             ERNAM
             ERZET
        FROM VBAK
        INTO TABLE ITAB
      WHERE VBELN IN P_VBELN.
      CALL SCREEN 100.
    *&      Module  F4_HELP  INPUT
    MODULE F4_HELP INPUT.
      FREE  :  XFIELDS,SEL_VAL,XVALUES.
      MOVE : 'ZMAHI'     TO XFIELDS-TABNAME,
             'REASON'    TO XFIELDS-FIELDNAME,
             'X'        TO XFIELDS-SELECTFLAG.
      APPEND XFIELDS.
      XVALUES = 'Non Trade F&F'.
      APPEND XVALUES .
      XVALUES = 'Non Trade Retention'.
      APPEND XVALUES .
      XVALUES = 'Oldbills Accnt cntmnt'.
      APPEND XVALUES .
      XVALUES = 'Non Trade Not claimed'.
      APPEND XVALUES .
      XVALUES = 'Non Trade Dispute'.
      APPEND XVALUES .
      XVALUES = 'Non Trade Payment Block'.
      APPEND XVALUES .
      XVALUES = 'N/T Subsntly Cleared'.
      APPEND XVALUES .
      XVALUES = 'N/T Unstld Advances'.
      APPEND XVALUES .
      XVALUES = 'N/T OThers'.
      APPEND XVALUES .
      XVALUES = 'Trade Non Receipt OF BOE'.
      APPEND XVALUES .
      XVALUES = 'Trade OEM Adjustments'.
      APPEND XVALUES .
      XVALUES = 'Trade Reject Of Material'.
      APPEND XVALUES .
      XVALUES = 'Trade NOt Claimed'.
      APPEND XVALUES .
      XVALUES = 'Trade Dispute'.
      APPEND XVALUES .
      XVALUES = 'Trade Payment BLock'.
      APPEND XVALUES .
      XVALUES = 'Trade Subsntly Cleared'.
      APPEND XVALUES .
      XVALUES = 'Trade Non Submission of bills'.
      APPEND XVALUES .
      XVALUES = 'Trade others'.
      APPEND XVALUES .
      CALL FUNCTION 'HELP_VALUES_GET_WITH_TABLE_EXT'
           EXPORTING
                CUCOL         = 0
                CUROW         = 0
                DISPLAY       = ' '
                FIELDNAME     = 'REASON'
                TABNAME       = 'ZIFIOD011'
           IMPORTING
                SELECT_VALUE  = ITAB-REASON
           TABLES
                FIELDS        = XFIELDS
                SELECT_VALUES = SEL_VAL
                VALUETAB      = XVALUES.
    ENDMODULE.                 " F4_HELP  INPUT
    *&      Module  STATUS_0100  OUTPUT
    MODULE STATUS_0100 OUTPUT.
      SET PF-STATUS '0100'.
    ENDMODULE.                 " STATUS_0100  OUTPUT
    *&      Module  USER_COMMAND_0100  INPUT
    MODULE USER_COMMAND_0100 INPUT.
      CASE SY-UCOMM.
        WHEN 'CANCEL' OR 'EXIT' OR 'BACK'.
          LEAVE TO SCREEN 0.
       WHEN 'NEXT_LINE'.
         CONTROL_DATA-top_line = CONTROL_DATA-top_line + 1.
         limit = fill - lines + 1.
         IF CONTROL_DATA-top_line > limit.
           CONTROL_DATA-top_line = limit.
         ENDIF.
       WHEN 'PREV_LINE'.
         CONTROL_DATA-top_line = CONTROL_DATA-top_line - 1.
         IF CONTROL_DATA-top_line < 0.
           CONTROL_DATA-top_line = 0.
         ENDIF.
       WHEN 'NEXT_PAGE'.
         CONTROL_DATA-TOP_LINE = CONTROL_DATA-TOP_LINE + LINES.
         LIMIT = LIMIT + 1.
         CONTROL_DATA-TOP_LINE = LIMIT.
       WHEN 'PREV_PAGE'.
         CONTROL_DATA-TOP_LINE = CONTROL_DATA-TOP_LINE - LINES.
         LIMIT = LIMIT - 1.
         CONTROL_DATA-TOP_LINE = LIMIT.
       WHEN 'LAST_PAGE'.
         DESCRIBE TABLE ITAB LINES LIMIT.
         CONTROL_DATA-TOP_LINE =  LIMIT.
       WHEN 'FIRST_PAGE'.
         CONTROL_DATA-TOP_LINE = 0.
    WHEN 'P--'.
    CLEAR ok_code.
    PERFORM paging USING 'P--'.
    WHEN 'P-'.
    CLEAR ok_code.
    PERFORM paging USING 'P-'.
    WHEN 'P+'.
    CLEAR ok_code.
    PERFORM paging USING 'P+'.
    WHEN 'P++'.
    CLEAR ok_code.
    PERFORM paging USING 'P++'.
      ENDCASE.
    ENDMODULE.                 " USER_COMMAND_0100  INPUT
    *&      Module  SCROLL_BAR  INPUT
    MODULE SCROLL_BAR INPUT.
      DESCRIBE  TABLE  ITAB  LINES  CONTROL_DATA-LINES.
    ENDMODULE.                 " SCROLL_BAR  INPUT
    *&      Form  paging
          text
         -->P_0356   text
    *FORM paging USING    VALUE(P_0356).
    FORM paging USING code.
    DATA: i TYPE i,
    j TYPE i.
    CASE code.
    WHEN 'P--'.
    CONTROL_DATA-top_line = 1.
    WHEN 'P-'.
    CONTROL_DATA-top_line = CONTROL_DATA-top_line - line_count.
    IF CONTROL_DATA-top_line LE 0.
    CONTROL_DATA-top_line = 1.
    ENDIF.
    WHEN 'P+'.
    i = CONTROL_DATA-top_line + line_count.
    j = CONTROL_DATA-lines - line_count + 1.
    IF j LE 0. j = 1. ENDIF.
    IF i LE j.
    CONTROL_DATA-top_line = i.
    ELSE.
    CONTROL_DATA-top_line = j.
    ENDIF.
    WHEN 'P++'.
    CONTROL_DATA-top_line = CONTROL_DATA-lines - line_count + 1.
    IF CONTROL_DATA-top_line LE 0.
    CONTROL_DATA-top_line = 1.
    ENDIF.
    ENDCASE.
    ENDFORM. " PAGING
    *ENDFORM.                    " paging
    thanks,
    maheedhar.t

  • Cisco/IPsec VPN built-in service of 10.6.1 does not work!

    Hello,
    I have been using for a while in Leopard (10.5) the Cisco VPN client delivered by Cisco company until I upgrade to Snow Leopard (10.6.1) which comes with a native built-in Cisco VPN client and I gave it a try in order to replace my dedicated Cisco app.
    I set up the Cisco VPN service in System Preferences > Network with the same settings than those used in the Cisco client but the connection fails when it is launched from the 10.6 network VPN service... while it works perfect when launched from the Cisco app itself.
    I need to activate a VPN connection in order to connect from home to my enterprise server and I have to respect the VPN settings the network administrator of my enterprise put in place.
    Those are very common:
    1. Host name
    2. Group name + Group password
    3. Domain name\Userid + User password
    4. RSA pass code (random code provided by a specific RSA keyfob)
    5. Transport is IPsec over UDP
    According to my testings, I would say that:
    1. The connection to the host is OK.
    2. The validation of the group name + group psw is OK.
    3. The validation of the userid + user psw is OK.
    4. The RSA pass code is rejected.
    According to my enterprise network engineer's investigations, the possible reasons of the connection failure could be:
    1. the UDP protocol is not (well) supported by the client service.
    2. and/or the extended authentification phase (aka "Xauth") is not working as it should.
    As far as I can see in other VPN clients, there is usually an option to select whether the transport is run over TCP or over UDP. Unfortunately, I have not been able to find such option in 10.6.
    In my opinion, it could be either a bug or an (undesired) limitation of the Apple VPN service. In both cases, it requires a quick fix from Apple as, for time being, this issue prevents me and many of us connecting to our enterprise servers when we are far from its local network.

    Thank you for your answers which confirm the limitation of the Apple VPN solution to the TCP transport only.
    I have to say that I do not understand such a decision from Apple since the UDP protocol is very common in the enterprise world.
    I will thus have to rely on the Cisco app itself. Is the version 4.9.01 (0080) the correct one for SL as well?
    Thank you!

Maybe you are looking for

  • Error:  FF805 Tax statement item missing for tax code O0

    Hi Gurus We are working in Upgrade Project 4.6C to ECC 6 We are getting an error when releasing billing document  to accounting in ECC 6 System.     Error:  FF805 Tax statement item missing for tax code O0     No tax item exists for tax code O0 in a

  • New MBP changes resolution when logging out

    I have a brand new MacBook Pro 2.2 GHz Intel Quad Core i7 with a high resolution glossy display which have a native resolution of 1680x1050 pixles. But almost every time after I log out the resolution changes to 1440x852. In System Settings the resol

  • Java plug-in.  Java 1.4 or Jinitiator?

    My office has had numerous issues with Java while running Discoverer over the years. I noticed, in the Enterprise Manager console, that I have 2 choices for the Java plug-in. Sun Java plug-in (1.4) (what we use now) and Oracle Jinitiator. Given the i

  • Resource related billing and periodic billing and milestone billing

    Hi friends,     Any one having resource related billing and periodic billing and milestone billing documents are any config documents and any more details. Waiting for reply urgently, Regards. kishore

  • Can NOT access Service Registry after upgrading SOA Suite to 10.1.3.5

    Hi all, I have a SOA suite 10.1.3.1 installation with Oracle Service Registry 10.1.3.1 installed. After I upgrade SOA suite to 10.1.3.5, the Oracle Service Registry can not be accessed. When I access http://myServer:8888/uddi/bsc/web or https://mySer