Schema filter sorting issue

After connecting to EBS database I filtered "Other users" to see only 2 schemas.
The schemas were sorted alphabetically on both sides, which made it easy to select the ones I needed.
After that I tried to modify the filter and this time Available schemas ar not sorted (at least not by name). Displayed schemas ar still sorted.
There is a workaround, however. Just keep pressing the schema name first letter to cycle through all schemas starting with that letter. Or type in full name to jump to it directly.
Pressing [help] brings up error "Cannot find help content...". Which is understandable. :)
Developer version v1215, Windows 2k.

Another workaround is to use >> to shift all users back to Displayed and then << to shift all back to Available and then they will be alphabetic. That should not be the permanent solution - I did log a bug on this.
-- Sharon

Similar Messages

  • Sorting issue after upgrade from 9i to 10g

    Dear all,
    It is found that the sorting behavior is different after upgrade from 9i to 10g.
    In 9i, even if the SQL statement does not specify the ORDER BY clause, the sorting order is consistent for a particular SQL statement and most likely the sequence follows the searched key fields' order.
    After upgrade to 10g, the query output could vary as long as the SQL statement does not specify the ORDER BY clause.
    Is it due to the Reverse Docid Sorting issue? How can I troubleshoot this issue?
    Thanks for your help,
    M.T.

    903714 wrote:
    Dear all,
    It is found that the sorting behavior is different after upgrade from 9i to 10g.
    In 9i, even if the SQL statement does not specify the ORDER BY clause, the sorting order is consistent for a particular SQL statement and most likely the sequence follows the searched key fields' order.
    After upgrade to 10g, the query output could vary as long as the SQL statement does not specify the ORDER BY clause.
    Is it due to the Reverse Docid Sorting issue? How can I troubleshoot this issue?
    Thanks for your help,
    M.T. This is expected behavior in 10g. Oracle will not order the dataset for you unless and until you explicitly specify it.
    So without using order by clause in 10g, oracle doesn't guarantee that rows will be ordered.
    To go back to old behavior like 9i, you can set a workaround by
    alter session set "_newsort_enabled"=false;
    Also see MOS - Order Of Data Retrieval Differs after upgrading 9i To 10g [ID 456707.1]

  • Query as a web service Sorting issue

    Hi All,
    We have designed an existing BI query as a web service but it seems to be ignoring the Sort order of different characteristics used (as defined in Bex Query Designer).
    Using the Context menu in QAAS and defining/managing the Sort is not working.
    Has anyone experienced such an issue and how to handle this?
    Thanks and Regards,
    Bansi

    Hi All,
    You can try this solution. It has something to do with the universe parameter, END_SQL.
    I implemented this as a work around and it solved our problem about the sorting issue with QAAWS.
    Here are the steps:
    1: Open the universe
    2. Ope File,  then Universe Parameter
    3. Click the parameter tab
    4. Scroll down until you see the 'END_SQL' entry. This entry is blank by default.
    5. Select END_SQL
    6. On the VALUE box, type: ORDER BY 1
    7. This will enable the REPLACE button. Click REPLACE
    8. Save the universe
    9 Test a query using 2 columns and view the SQL.
    You should see now the ORDER BY 1 inferred in the SQL statement.
    Voila!!!!
    Of course you can always add ORDER By 1,2,3 later if there's a need.
    Enjoy.....
    Ferdinand

  • Finder sort issue

    I seem to be having a sorting issue.
    This order seems odd to me, but like to get your opinions about it.
    (This folder is sorted alphabetically by file name.)
    2008 01.doc
    2008 02.doc
    Activiteit_oktober.doc
    af 200802 - groen reserve.rtf
    af 200802 - groen.rtf
    af 20071130 - groen-geel.doc
    af 20080126 - groen.rtf
    af 20080216 avond - leiding WE.pages
    af 20080704 avond - groen & oranje.pages
    af 20080709 avond - bezinning.rtf
    idee spel.rtf
    In my logic the file 'af 20071130 - groen-geel.doc' should be before the two files beginning with 'af 200802' and not after. Or is this just me?

    In my logic the file 'af 20071130 - groen-geel.doc' should be before the two files beginning with 'af 200802' and not after. Or is this just me?
    OS X Finder sorts strings of digits according to their value, not digit by digit. 200802 is less than 20071130. Here is a note on the issue:
    http://homepage.mac.com/thgewecke/sorting.html

  • Tableview Filter/Sort Always open a new window!

    Dear experts,
    I have came accross a weird problem. When user filter/sort function in a tableview, a new window always display automatically with the result. But the old page does not change accordingly. But when you use filter/sort function in the new window, it's fine.
    I think this may because my old window is a ModalDialog window. It was opened using "
    javascript:window.showModalDialog". When using filter/sort function, a real window rather than a dialogue appears with the correct result. But this is not what I wanted. I want to display the filter/sort result in the dialogue window, anything could solve this problem?
    Thanks in advance,
    Sinvaya

    The easiest way to open new windows in Finder, Safari and just about any other program in Mac OS X is to use the keyboard shortcut, 'Command' + 'n'

  • Front Row sorting issues

    Hello,
    I know this issue has been posted several times and without any real solutions. But I'm going to ask again anyway in case the magical hacking gnomes have found a work-around.
    I have many sorting issues. There seems to be a lot of kvetching on here already about how Front Row sorts TV shows. But not only do my shows come up backwards within seasons, in some cases seasons themselves are out of order. For example, I have all 3 seasons of 30 Rock (purchased through iTMS) and they go season 1, season 3, season 2. Several other shows with multiple seasons are the same.
    But I also have a music sorting issue. The first part of this issue has to do with compilations. I've got several compilations in my library, and in iTunes I've sorted them by Various Artists rather than individual artists. In Front Row, if I scroll down to "V," there is no "Various Artists" like you might expect but instead a list of all the artists in all the compilations completely out of order. (Actually, they're ordered by their track number on the different albums. Yeah. That makes sense.) I could deal with these artists showing up in their normal places alphabetically, but not all lumped together under V.
    The other issue has to do with albums with one artist who has some tracks that feature other artists. Kanye West's "Graduation" is a good example. About half the tracks on the album are him "featuring Jamie Foxx," for example. So I put "Kanye West" in the sort field of this album so it displays properly in iTunes. Not only does this seem to have no effect on how things are sorted in Front Row, but there's actually multiple "Kanye West"s now, each one identical, as well as multiple "Kanye West feat. Jamie Foxx," lines and all the other multiple artist track. Uh...what?
    So I know that Front Row for some ridiculous reason is (a) not customizable and (b) operates under completely different sorting rules than iTunes (which makes no sense), but if anyone has any advice or tips or comments or whatever, that would be greatly appreciated.
    I've considered switching to a different media management program, but what I like about Front Row is its simplicity. I don't really feel like learning a whole new system (let alone getting my wife to buy into that idea). I've got better ways to spend my time. So, it's a trade off, I guess.
    Anyway, Apple Gods? Are you out there? Are you listening?

    I can't believe we're still banging on about the sorting problems. Apple have seen fit to provide a number of features to allow the user to get iTunes working the way they like, e.g. grouping compilation artists and the use of sort fields. I think you can now even keep compilation artists grouped on the iPod. But why oh why do they then totally ignore this for the AppleTV and Front Row (which look like the same codebase to me)?
    I have hundreds of genuine Artists that I want to see listed in the Artists' list, but not the thousands of others that appear on compilations. They don't even sort the artists by the Artist Sort field that they themselves provide in iTunes. This makes a nonsense of trying to use either the ATV or Front Row.
    Playlists are no help as they simply lump all contained tracks in one great list. Useless.
    The annoying thing is, they can get it right. iTunes just gets better and better in this regard, each release sorting out more of the omissions of earlier versions. But ATV and Front Row - nope, nothing. Still just as stupid as always. Just what will it take to convince Apple to 'sort' (ha) this out? How can they justify such entirely different ways of working on their different products?

  • Sorting issue in Pojo Datacontrol Filter-Paging ADF Table

    hi,
    Created and af:table using sample given at ADF Code Corner 037. How-to build pagination into ADF POJO Data Control(http://www.oracle.com/technetwork/developer-tools/adf/learnmore/37-adf-pojo-pagination-169179.pdf).
    with this sample, able to get pagination and implemented filtering by overriding queryListener.
    but there is an issue with sorting, even though sortListener() is implemented, when a column is sorted from UI ..
    First ADF inbuilt sort is getting called, getAllDepartments(int index, int range) is invoked TotalRecords/Range times.
    Second sortListener() method is getting invoked.
    is there any way to skip the first step? so that i can write my own Sort logic in SortListener() and trigger the Iterator progrmatically?
    -thanks

    Hi Arunkumar,
    Thanks for your reply. But for custom table, how to create that filter model ?
    When i create the table by dragging it from view, filter model is assigned by default to query descriptor.
    But for this case, how to set the filterModel attribute ? Do i need to create any custom filter model class here ?
    If yes, how to write that. let me know any pointers.
    Please let me know in this regard.
    Thanks,
    Mahipal

  • Sort,filter Apexir_rollover issue in IR report

    Hi,
    I am using apex latest version, My Interactive report has several columns, to help user I have set overflow:auto;Sort,filter Apexir_rollover is working fine only for first few columns, for rest of the columns it disappears, I did refer to the several posts related to the same issue, I could not get the solution, can any one help me on this.
    Regards,
    Rajesh

    use this blog to
    Filter interactive report by clicking report cell
    Pars.

  • XQuery sorting issue

    Hi,
    Right now I am in a big trouble. I am new in XQuery, but right now I'm in a project using Xquery using PHP and XSLT..
    In our project we have large no. data (its a property listing site) and I'm storing that data to Berkeley DB (XML DB). The problem is when I am searching for a property its taking too much time for getting the result. The ORDER BY is creating the problem(Query 1).. with out sorting its working fine(Query 2). But for my project sorting is needed and its very impotent. So kindly please check my query(Query1) and please give me a solution as soon as possible. Following are the query:
    Query1:
    let $properties := (
    for $property in collection('bdb/properties.dbxml')/properties/property
    [( sale_price >=60000 and sale_price <=500000 ) and ( building_square_footage >=300 and building_square_footage <=3000 ) and ( bedrooms >=2 and bedrooms <=6 )]
    order by
    contains($property/mls_agent_id/text(), '505199') descending,
    matches($property/mls_office_id/text(), '^CBRR') ascending,
    $property/sale_price/number() descending
    return $property
    let $properties := subsequence($properties,10,10) return <properties>{$properties}</properties>
    Query 2:
    let $properties := (
    for $property in subsequence (
    collection('bdb/properties.dbxml')/properties/property
    [( sale_price >=60000 and sale_price <=500000 ) and ( building_square_footage >=300 and building_square_footage <=3000 ) and ( bedrooms >=2 and bedrooms <=6 )]
    , 1, 10)
    descending return $property
    ) return <properties>{$properties}</properties>
    Thank you,
    Vijesh
    Edited by: 893736 on Oct 28, 2011 10:28 AM
    Edited by: 893736 on Oct 28, 2011 10:33 AM

    Hi,
    Thank you for your reply.. right now there is a slight improvement in Query. But still i'm stucked with issue... also this project is also stucked...
    Now the problem is when I am searching for a property it will list the first 10 property quickly(100% speed). Then I'm going to 2dn, 3rd page its working in the same speed. But if I'm going to 10th(30% speed) or 100th or 1500th(15%speed) page is working very slowly.
    Following are my query:
    let $property_ids:=
    for $property in collection('bdb/properties.dbxml')/properties/property
    order by $property/sale_price/number() descending
    return $property/@property_id,
    for $property in collection('bdb/properties.dbxml')/properties/property
    order by $property/sale_price/number() descending
    return $property/@property_id,
    for $property in collection('bdb/properties.dbxml')/properties/property
    order by $property/sale_price/number() descending
    return $property/@property_id
    return <properties>{
    for $id in subsequence($property_ids, 1, 10) return
    collection('bdb/properties.dbxml')/properties/property@property_id = $id
    }</properties>
    And some times query will change like the following way based on the filter option in my page(means sort by only sale_price field):
    let $property_ids:=
    for $property in collection('bdb/properties.dbxml')/properties/property
    order by $property/sale_price/number() descending
    return $property/@property_id
    return <properties>{
    for $id in subsequence($property_ids, 1, 10) return
    collection('bdb/properties.dbxml')/properties/property@property_id = $id
    }</properties>
    then from the first page its self its performance is very slow(15%).
    Could you please check my query and help me to solve the issue...
    Thank you,
    Vijesh

  • 6th Gen sorting issues

    iPod software: 2.0.1
    iTunes software:.10.5.1.42
    Windows 7 Pro 64 bit SP 1
    I'm a strong supporter of proper sorting. So much so that I add the year of release to the Sorting > Sort Album field to bypass the alphabetical sorting iTunes seems to prefer.
    This is a minor issues in the grand scheme, but if someone can identify what I'm doing wrong, that would be awesome.
    In the early part of Prince's career, he released music as Prince (1981, 1982, 1987) and also as Prince and The Revolution (1984, 1985). Looking above to how I sort by year of release, I would prefer that these five albums sort chronologically, but with the correct artist names. On the iPod as of now, they sort as Prince (three albums), Prince and The Revolution (two albums), and Prince (three albums) again. Same three albums, same 34 songs, same art, same everything. I can make them sort correctly in iTunes, but not on the iPod.
    Thanks for any advice you might have!
    Screenshot of iTunes, then a (blurry) pic of the iPod:
    http://www.imagebam.com/image/e7e028161665617
    http://www.imagebam.com/image/d50356161665991

    I haD the same issue, and was thoroughly ticked off until doing some research and then trying couple things.
    I was able to change the volume limit, that WAS set at half.  I adjusted it to max volume, set a lock passcode, and away I drove.
    Then, upon hitting "play", I began to get a little ticked off.  I realized after a few minutes, I couldn't hear anything playing.
    It was so quiet- and I-95 is noisy, with me regretting buying another Apple product, after is wrote not to.
    So- after reading through a couple of these threads, I just adjusted the volume limit, and VOILA!
    It reverted to 50%.
    So, I did a total wipe, factory-reset it as new iPod.  I checked setting=>volume limit and it was at the 50% point again. First thing that I did was go to the last selection under settings menu, "reset settings" and noted it doesn't delete sync days, solely sys settings.
    I adjusted the volume limit to 100% immediately afterwards, set a new passcode and then.....
    Hit play.
    It worked. Plays just as loud as my original 3rd Gen iTouch. 
    So Dylan1219, maybe try that?  It's so simple, I am shocked that's how I fixed it.  It had been set- and always snapped back to the 50% mark.
    So, MAYBE that could solve the problem..?  I have hearing loss from rock &amp; roll and concerts, etc...so, thankfully this isn't a bunk product.  Just had a bunk setting. 
    It has stayed at Max level for hours now, and can state it solved it for me.
    I would hypothesize, all iPod classics are made the same, except for the "options"  of storage and color.  Maybe a small "governor" or a piece of extra firmware is added after the fact, or only "every 9th iPod" who knows for sure...? 

  • SQL Developer 1.1 - Schema Filter

    The new filter behaviour for "Other Users" in the object navigator doesn't seem to allow providing a list of users. The conditions appear to be AND'd together.
    Am I missing something? I'd like to provide a finite list of users, such as
    HR, OE, SCOTT
    One more issue, it would be really nice to be able to add a filter predicate that remove users with no objects. We have thousands of user accounts that are defined strictly for authentication and own nothing.
    PS: This looks like a great set of new functionality, I'm busy exploring and loving it! Good work.

    I have multiple database connections and I created a filter for the "Other Users" schemas. I would like to copy that filter to other database connections.
    Can I do this either via some properties xml file or somewhere in the program?
    Currently, the filter dialog does not allow you to save the applied filter.
    I'm using version 1.1.2.25.

  • Filter Coding Issues

    I've been following (roughly) the simple virus scanner interface that SUN provides, and adapted it into a slightly heavier weight filter that interfaces with libclamav. At first both were compiled using GCC, and I thought due to some of the weird problems I had when debugging flags were inserted, maybe Sun Studio would give better results. It hasn't, and I'm at a bit of a loss as to what to do next.
    The symptom is that parts of the message just dissapear, and I see the old mime boundaries within the message body, so it seems like there's some pointer indicating where the message starts that's being corrupted by something in my code.
    Interestingly, if I stop processing the message while still inside the headers, there is no problem, but that's not a very effective virus scanner if it can only look at the content type and filename of the part now is it?
    This happens regardless of whether I use GCC or CC, and I'm using 0.88.1 of clamav. The output message is shown last. It should be fairly obvious what's wrong with it.
    Here's my code, perhaps someone can tell me what I'm doing wrong.
    ** WARNING ** This IS NOT polished code, so please don't expect it to be perfect. It's clean, but includes absolute pathnames, and some other nauties that should be removed before anyone even thinks of reusing this. Once it actually works, I'll do the nessisary code cleanup, and release this to the community to do whatever anyone wants with.
    Makefile
    SERVER_ROOT=/opt/SUNWmsgsr
    INSTALL_LOCATION=/var/opt/SUNWmsgsr/site-programs/
    INCLUDE=-I${SERVER_ROOT}/include
    LIBPATH=-L${SERVER_ROOT}/lib
    CLAMLIBS=`/usr/local/bin/clamav-config --libs` -lclamav
    CLAMFLAGS=`/usr/local/bin/clamav-config --cflags`
    LIBS=-lmtasdk ${CLAMLIBS}
    FLAGS=${CLAMFLAGS}
    all:
            cc ${FLAGS} -o msgsr_clamav msgsr_clamav.c \
                    ${INCLUDE} ${LIBPATH} ${LIBS}
    install:
            cp msgsr_clamav ${INSTALL_LOCATION}
            cp msgsr_clamav.cnf ${INSTALL_LOCATION}************************************************
    Expansions
    CLAMLIBS=-L/usr/local/lib -lz -lbz2 -lpthread -lclamav
    CLAMFLAGS=-I/usr/local/include -xO4************************************************
    msgsr_clamav.c
    * msgsr_clamav
    * Interface the Sun Java System Message Server with LibClamAV
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <ctype.h>
    #include <pthread.h>
    #include "clamav.h"     // LibClamAV Header
    #include "mtasdk.h"
    * A structure to store channel options
    typedef struct {
         /* Produce debug output? */
         int debug;
         // Maximum size (in bytes) attachment to scan
         int scan_maxsize;
         // Scan recursion level
         int scan_recursion_level;
         // Max files
         int scan_maxfiles;
         // Path to ClamAV Virus Database
         char db_dir[BIGALFA_SIZE+3];
         // Used Internally by ClamAV. Stored here for ease of access
         struct cl_node *root;
         unsigned int signo;
         struct cl_stat dbstat;
         pthread_mutex_t reload_mutex;
         // MIME types to ignore
         char ignore_mime_types[BIGALFA_SIZE+3];
         // Types of files to ignore
         char ignore_file_types[BIGALFA_SIZE+3];
         /* Unwanted MIME content types (ALWAYS stripped, never scanned) */
         char bad_mime_types[BIGALFA_SIZE+3];
         /* Unwanted file types (ALWAYS stripped, never scanned)*/
         char bad_file_types[BIGALFA_SIZE+3];
         /* Length of bmt string */
         size_t bmt_len;
         /* Length of bft string */
         size_t bft_len;
    } our_options_t;
    // A structure passed per message to contain message specific data, including open files, etc.
    typedef struct {
         // The filename of the temp file in use so it can be unlinked when we're done with it.
         char temp_file_name[BIGALFA_SIZE * 2 + 10];
         // The file * to the temp file in use, so we don't have to reopen it across calls to decode_inspect
         FILE *temp_file;
         // A pointer to the single instance of our_options_t that is shared across all threads
         our_options_t * options;
    } msg_temp_data_t;
    * Forward declarations
    static void error_exit(int ires, const char *msg);
    static void error_report(our_options_t *options, int ires, const char *func);
    static void error_reports(our_options_t *options, const char* errStr, const char *func);
    static int is_bad_mime_type(our_options_t *options, mta_decode_t *dctx, char *buf, size_t maxbuflen);
    static int is_bad_file_type(our_options_t *options, mta_opt_t *params, const char *param_name, char *buf, size_t maxbuflen);
    static int load_options(our_options_t *options);
    static mta_dq_process_message_t process_message;
    static mta_decode_read_t decode_read;
    static mta_decode_inspect_t decode_inspect;
    * main() -- Initialize the MTA SDK, load our options, and then
    * start the message processing loop.
    int main()
         int ires,ret;
         char error_msg[BIGALFA_SIZE+3];
         our_options_t options;
         * Initialize the MTA SDK
         * See explanatory comment 1
         if ((ires = mtaInit(0)))
              error_exit(ires, "Unable to initialize the MTA SDK");
         * Load our channel options
         * See explanatory comment 2
         if ((ires = load_options(&options)))
              error_exit(ires, "Unable to load our channel options");
         * Initialize the ClamAV Virus Engine and Database
         // Preconditions to initializing the ClamAV database
         options.root=NULL; options.signo=0;
         // Load the virus database
         mtaLog("cl_loaddbdir() loading database from %s",options.db_dir);
         if ((ret = cl_loaddbdir(options.db_dir, &options.root, &options.signo)))
              sprintf(error_msg,"cl_loaddbdir() error: %s", cl_strerror(ret));
              error_exit(MTA_NO,error_msg);
         mtaLog("cl_loaddbdir() loaded %d virus definitions",options.signo);
         // Internalize the virus database structure
         mtaLog("cl_build() initializing database");
         if((ret = cl_build(options.root)))
              sprintf(error_msg,"cl_build() error: %s", cl_strerror(ret));
              error_exit(MTA_NO,error_msg);
         // Keep track of database updates
         memset(&options.dbstat, 0, sizeof(struct cl_stat));
         cl_statinidir(options.db_dir, &options.dbstat);
         // Initialize our reload mutex
         if (ret = pthread_mutex_init(&options.reload_mutex,NULL))
              sprintf(error_msg,"pthread_mutex_init() error: %d", ret);
              error_exit(MTA_NO,error_msg);
         * Now process the queued messages. Be sure to indicate a
         * thread stack size sufficient to accomodate message
         * enqueue processing.
         * See explanatory comment 3
         if ((ires = mtaDequeueStart((void *)&options,
         process_message, NULL, 0)))
         error_exit(ires, "Error during dequeue processing");
         * All done
         cl_free(options.root);
         mtaDone();
         return(0);
    *Reloads the virus database and re-initializes the in memory structure
    * Loads a new virus database, then if all succeeds, it
    * swaps the new database with the old one.  It's assumed
    * clamav releases the database gracefully, but another mutex
    * may be required if this is not the case.
    static int reload_database(our_options_t *options)
         struct cl_node *newroot = NULL,*oldroot;
         char error_msg[BIGALFA_SIZE+3];
         int ret;
         unsigned int signo=0;
         if (pthread_mutex_trylock(&options->reload_mutex)) {     // Only one reload at a time thank you.
              if(cl_statchkdir(&options->dbstat) == 1) {     // Make sure we actually need an update
                   mtaLog("reload_database() Virus database is stale... reloading");
                   mtaLog("cl_loaddbdir() reloading database from %s",options->db_dir);
                   // Load the new virus database
                   if ((ret = cl_loaddbdir(options->db_dir, &newroot, &signo)))
                        mtaLog("cl_loaddbdir() error: %s", cl_strerror(ret));
                        return (-1);
                   mtaLog("cl_loaddbdir() loaded %d virus definitions",options->signo);
                   // Internalize the virus database structure
                   mtaLog("cl_build() re-initializing database");
                   if((ret = cl_build(newroot)))
                        mtaLog("cl_build() error: %s", cl_strerror(ret));
                        mtaLog("reload_database() Database reload aborted");
                        cl_free(newroot);
                        return (-2);
                   // Save a pointer to the old root
                   oldroot = options->root;
                   // Swap in the new root and signo
                   options->root = newroot;
                   options->signo = signo;
                   // Release the old root
                   cl_free(oldroot);
                   mtaLog("database_reload() Successfully loaded new virus database");
                   // Keep track of database updates
                   cl_statfree(&options->dbstat);
                   cl_statinidir(options->db_dir, &options->dbstat);
              pthread_mutex_unlock(&options->reload_mutex);
    * process_message() -- This routine is called by
    * mtaDequeueStart() to process each queued
    * message. We don&#31258; make use of ctx2, but
    * ctx1 is a pointer to our channel options.
    * See explanatory comment 4
    static int process_message(void **ctx2, void *ctx1, mta_dq_t *dq, const char *env_from, size_t env_from_len)
         const char *adr;
         int disp, ires;
         size_t len;
         mta_nq_t *nq;
         msg_temp_data_t msg_data;
         * Initializations
         nq = NULL;
         msg_data.options = (our_options_t *)ctx1;
         msg_data.temp_file = NULL;
         * Check the virus database to make sure it isn't stale
         * If it it's not currently reloading, and is stale, reload it.
         //if(cl_statchkdir(&(msg_data.options->dbstat)) == 1)
         //     reload_database(msg_data.options);
         * A little macro to do error checking on mta*() calls
         #define CHECK(f,x) \
         if ((ires = x)) { error_report(msg_data.options, ires, f); goto \
              done_bad; }
         * Start a message enqueue. Use the dequeue context to copy
         * envelope flags fromt the current message to this new
         * message being enqueued.
         * See explanatory comment 5
         CHECK("mtaEnqueueStart", mtaEnqueueStart(&nq, env_from, env_from_len, MTA_DQ_CONTEXT, dq, 0));
         * Process the envelope recipient list
         * See explanatory comment 6
         while (!(ires = mtaDequeueRecipientNext(dq, &adr, &len, 0)))
              * Add this envelope recipient address to the message
              * being enqueued. Use the dequeue context to copy
              * envelope flags for this recipient from the current
              * message to the new message.
              ires = mtaEnqueueTo(nq, adr, len, MTA_DQ_CONTEXT,
              dq, MTA_ENV_TO, 0);
              /* See explanatory comment 7 */
              disp = (ires) ? MTA_DISP_DEFERRED : MTA_DISP_RELAYED;
              CHECK("mtaDequeueRecipientDisposition", mtaDequeueRecipientDisposition(dq, adr, len,disp, 0));
         * A normal exit from the loop occurs when
         * mtaDequeueRecipientNext() returns an MTA_EOF status.
         * Any other status signifies an error.
         if (ires != MTA_EOF)
              error_report(msg_data.options, ires, "mtaDequeueRecipientNext");
              goto done_bad;
         * Begin the MIME decode of the message
         * See explanatory comment 8
         CHECK("mtaDecodeMessage",
              mtaDecodeMessage(
              /* Private context is our message data structure */
              (void *)&msg_data,
              /* Input is the message being dequeued */
              MTA_DECODE_DQ, (void *)dq,
              /* Output is the message being enqueued */
              MTA_DECODE_NQ, (void *)nq,
              /* Inspection routine */
              decode_inspect,
              /* Convert non-MIME formats to MIME */
              MTA_DECODE_THURMAN,
              0));
         * Finish the enqueue
         * NOTE: IT&#25285; IMPORTANT TO DO THIS before DOING THE
         * DEQUEUE. YOU WILL LOSE MAIL IF YOU DO THE DEQUEUE FIRST
         * and then THE ENQUEUE FAILS.
         * See explanatory text 9
         CHECK("mtaEnqueueFinish", mtaEnqueueFinish(nq, 0));
         nq = NULL;
         * Finish the dequeue
         CHECK("mtaDequeueFinish", mtaDequeueMessageFinish(dq, 0));
         * All done with this message
         return(MTA_OK);
    done_bad:
         * Abort any ongoing enqueue or dequeue
         if (nq)
              mtaEnqueueFinish(nq, MTA_ABORT, 0);
         if (dq)
              mtaDequeueMessageFinish(dq, MTA_ABORT, 0);
         * And return our error status
         return(ires);
    #undef CHECK
    * decode_inspect() -- This is the routine that inspects each
    * message part, deciding whether to accept
    * or reject it.
    * See explanatory comment 10
    static int decode_inspect(void *ctx, mta_decode_t *dctx, int data_type,const char *data, size_t data_len)
         char buf[BIGALFA_SIZE * 2 + 10];
         const char *virname;
         int i;
         static unsigned int part_c = 1;
         msg_temp_data_t *msg_data = (msg_temp_data_t *)ctx;
         strncpy(buf,data,data_len);
         buf[data_len] = 0;
         mtaLog("decode_inspect() (%d,%ud): %s",data_type,dctx,buf);
         switch (data_type)
              case MTA_DATA_HEADER:
              * See if the part has:
              * 1. A bad MIME content-type,
              * 2. A bad file name extension in the (deprecated)
              * NAME= content-type parameter, or
              * 3. A bad file name extension in the
              * FILENAME= content-disposition parameter.
              i = 0;
              if ((i = is_bad_mime_type((void *)msg_data->options, dctx, buf, sizeof(buf))) ||
                   is_bad_file_type((void *)msg_data->options,mtaDecodeMessageInfoParams(dctx,MTA_DECODE_CTYPE_PARAMS, NULL),"NAME", buf, sizeof(buf)) ||
                   is_bad_file_type((void *)msg_data->options,mtaDecodeMessageInfoParams(dctx,MTA_DECODE_CDISP_PARAMS, NULL),"FILENAME", buf, sizeof(buf)))
                   char msg[BIGALFA_SIZE*4 + 10];
                   * Replace this part with a text message indicating
                   * that the part&#30196; content has been deleted.
                   * See explanatory comment 11
                   if (i)
                        i = sprintf(msg,
                             "The content of this message part has been removed.\n"
                             "It contained a potentially harmful media type of %.*s",
                             strlen(buf)-2, buf+1);
                   else
                        i = sprintf(msg,
                             "The content of this message part has been removed.\n"
                             "It contained a potentially harmful file named '%s'", buf);
                   mtaLog("decode_inspect(): %s",msg);
                   return(mtaDecodeMessagePartDelete(dctx,
                        MTA_REASON, msg, i,
                        MTA_DECODE_CTYPE, "text", 4,
                        MTA_DECODE_CSUBTYPE, "plain", 5,
                        MTA_DECODE_CCHARSET, "us-ascii", 8,
                        MTA_DECODE_CDISP, "inline", 6,
                        MTA_DECODE_CLANG, "en", 2, 0));
              } break; // case MTA_DATA_HEADER:
              case MTA_DATA_TEXT:
              case MTA_DATA_BINARY:
                   if (msg_data->temp_file == NULL)
                        sprintf(msg_data->temp_file_name,"/tmp/%i.tmp",part_c++);
                        mtaLog("messageDecode(): Opening Temp File %s",msg_data->temp_file_name);
                        msg_data->temp_file = fopen(msg_data->temp_file_name,"wb");
                   fwrite(data,data_len,1,msg_data->temp_file);
                   return(MTA_OK);
                   break;
              case MTA_DATA_NONE:
                   fflush(msg_data->temp_file);
                   fclose(msg_data->temp_file);
                   msg_data->temp_file = NULL;
                   struct cl_limits limits;
                   memset(&limits, 0, sizeof(struct cl_limits));
                   /* maximal number of files in archive */;
                   limits.maxfiles = 1000;
                   /* maximal archived file size */
                   limits.maxfilesize = 10 * 1048576; /* 10 MB */
                   /* maximal recursion level */
                   limits.maxreclevel = 5;
                   /* maximal compression ratio */
                   limits.maxratio = 200;
                   /* disable memory limit for bzip2 scanner */
                   limits.archivememlim = 0;
                   i = cl_scanfile(msg_data->temp_file_name, &virname, NULL, msg_data->options->root,&limits,CL_SCAN_STDOPT);
                   unlink (msg_data->temp_file_name);
                   if(i == CL_VIRUS) {
                        char msg[BIGALFA_SIZE*4 + 10];
                        size_t idlen;
                        i = sprintf(msg,
                             "The content of this message part has been removed.\n"
                             "It contained the virus %s in a file named '%s'", virname,buf);
                        mtaDequeueInfo(dctx,MTA_ENV_ID,&buf,&idlen);
                        buf[idlen] = '\0';
                        mtaLog("decode_inspect(): Detected %s virus in part %i of msg ID %s",virname,0,buf);
                        return(mtaDecodeMessagePartDelete(dctx,
                             MTA_REASON, msg, i,
                             MTA_DECODE_CTYPE, "text", 4,
                             MTA_DECODE_CSUBTYPE, "plain", 5,
                             MTA_DECODE_CCHARSET, "us-ascii", 8,
                             MTA_DECODE_CDISP, "inline", 6,
                             MTA_DECODE_CLANG, "en", 2, 0));
                   } else {
                        if(i != CL_CLEAN)
                             mtaLog("decode_inspect() Error: %s scanning file %s",cl_strerror(i),msg_data->temp_file_name);
                        else
                             mtaLog("decode_inspect(): Part in file %s is clean",msg_data->temp_file_name);
                        //return(mtaDecodeMessagePartCopy(dctx, 0));
                        return(MTA_OK); break;
         return(MTA_OK);
    * is_bad_mime_type() -- See if the part&#30196; media type is in our
    * bad MIME content types, for example:
    * application/vbscript
    * See explanatory comment 13
    static int is_bad_mime_type(our_options_t *options,
    mta_decode_t *dctx, char *buf,
    size_t maxbuflen)
         const char *csubtype, *ctype;
         size_t i, len1, len2;
         char *ptr;
         * Sanity checks
         if (!options || !options->bmt_len ||
              !options->bad_mime_types[0] ||
              !dctx)
              return(0);
         * Get the MIME content type
         ctype = mtaDecodeMessageInfoString(dctx, MTA_DECODE_CTYPE,NULL, &len1);
         csubtype = mtaDecodeMessageInfoString(dctx,MTA_DECODE_CSUBTYPE,NULL, &len2);
         * Build the string: <0x01>type/subtype<0x01><0x00>
         ptr = buf;
         *ptr++ = (char)0x01;
         for (i = 0; i < len1; i++)
              *ptr++ = tolower(*ctype++);
         *ptr++ = '/';
         for (i = 0; i < len2; i++)
              *ptr++ = tolower(*csubtype++);
         *ptr++ = (char)0x01;
         *ptr = '\0';
         * Now see if the literal just built occurs in the list of
         * bad MIME content types
         return((strstr(options->bad_mime_types, buf)) ? -1 : 0);
    * is_bad_file_type() -- See if the part has an associated file
    * name whose file extension is in our list
    * of bad file names, such as .vbs.
    * See explanatory comment 14
    static int is_bad_file_type(our_options_t *options,
    mta_opt_t *params,
    const char *param_name, char *buf,
    size_t maxbuflen)
         const char *ptr1;
         char fext[BIGALFA_SIZE+2], *ptr2;
         size_t i, len;
         * Sanity checks
         if (!options || !options->bft_len || !params || !param_name)
              return(0);
         len = 0;
         buf[0] = '\0';
         if (mtaOptionString(params, param_name, 0, buf, &len,
              maxbuflen - 1) ||
              !len || !buf[0])
              * No file name parameter specified
              return(0);
         * A file name parameter was specified. Parse it to
         * extract the file extension portion, if any.
         ptr1 = strrchr(buf, '.');
         if (!ptr1)
              * No file extension specified
              return(0);
         * Now store the string created earlier in fext[]
         * Note that we drop the &#12539;&#12539;from the extension.
         ptr1++; /* Skip over the &#12539;&#12539;*/
         ptr2 = fext;
         *ptr2++ = (char)0x01;
         len = len - (ptr1 - buf);
         for (i = 0; i < len; i++)
              *ptr2++ = tolower(*ptr1++);
         *ptr2++ = (char)0x01;
         *ptr2++ = '\0';
         * Now return -1 if the string occurs in
         * options->bad_file_types.
         return((strstr(options->bad_file_types, fext)) ? -1 : 0);
    * load_options() -- Load our channel options from the channel&#30196;
    * option file
    * See explanatory comment 15
    static int load_options(our_options_t *options)
         char buf[BIGALFA_SIZE+1];
         size_t buflen, i;
         mta_opt_t *channel_opts;
         int ires;
         const char *ptr0;
         char *ptr1;
         * Initialize the our private channel option structure
         memset(options, 0, sizeof(our_options_t));
         * Set internal defaults for important features
         options->scan_maxsize = 10 * 1024 * 1024; // 10 MB
         options->scan_recursion_level = 10;
         options->scan_maxfiles = 200;
         strcpy(options->db_dir,cl_retdbdir()); // Default ClamAV Directory
         * Access the channel&#30196; option file
         * See explanatory comment 16
         channel_opts = NULL;
         if ((ires = mtaOptionStart(&channel_opts, "/var/opt/SUNWmsgsr/site-programs/msgsr_clamav.cnf", 0, 0)))
              mtaLog("Unable to access our channel option file");
              return(ires);
         * DEBUG=0|1
         options->debug = 0;
         mtaOptionInt(channel_opts, "DEBUG", 0, &options->debug);
         if (options->debug)
              mtaDebug(MTA_DEBUG_SDK, 0);
         * BAD_MIME_TYPES=type1/subtype1[,type2/subtype2[,...]]
         buf[0] = '\0';
         mtaOptionString(channel_opts, "BAD_MIME_TYPES", 0, buf,
         &buflen, sizeof(buf));
         * Now translate the comma separated list:
         * Type1/Subtype1[,Type2/Subtype2[,...]]
         * to
         *<0x01>type1/subtype1[<0x01>type2/subtype2[<0x01>...]]<0x01>
         ptr0 = buf;
         ptr1 = options->bad_mime_types;
         *ptr1++ = (char)0x01;
         for (i = 0; i < buflen; i++)
              if (*ptr0 != ',')
                   *ptr1++ = tolower(*ptr0++);
              else
                   *ptr1++ = (char)0x01;
                   ptr0++;
         *ptr1++ = (char)0x01;
         *ptr1 = '\0';
         options->bmt_len = ptr1 - options->bad_mime_types;
         * BAD_FILE_TYPES=["."]Ext1[,["."]Ext2[,...]]
         buf[0] = '\0';
         buflen = 0;
         mtaOptionString(channel_opts, "BAD_FILE_TYPES", 0, buf,
         &buflen, sizeof(buf));
         * Now translate the comma separated list:
         * ["."]Ext1[,["."]Ext2[,...]]
         * to
         * <0x01>ext1[<0x01>ext2[<0x01>...]]<0x01>
         ptr0 = buf;
         ptr1 = options->bad_file_types;
         *ptr1++ = (char)0x01;
         for (i = 0; i < buflen; i++)
              switch(*ptr0)
                   default : /* copy after translating to lower case */
                        *ptr1++ = tolower(*ptr0++);
                        break;
                   case '.' : /* discard */
                        break;
                   case ',' : /* end current type */
                        *ptr1++ = (char)0x01;
                        ptr0++;
                   break;
         *ptr1++ = (char)0x01;
         *ptr1 = '\0';
         options->bft_len = ptr1 - options->bad_file_types;
         * Dispose of the mta_opt_t context
         * See explanatory comment 17
         mtaOptionFinish(channel_opts);
         * And return a success
         return(MTA_OK);
    * error_report() &#12539;Report an error condition when debugging is
    * enabled.
    static void error_report(our_options_t *options, int ires,
    const char *func)
         if (options->debug)
              mtaLog("%s() returned %d; %s",
                   (func ? func : "?"), ires, mtaStrError(ires,0));
    static void error_reports(our_options_t *options, const char* errStr,
    const char *func)
         if (options->debug)
              mtaLog("%s() reported: %s",
                   (func ? func : "?"), errStr);
    * error_exit() -- Exit with an error status and error message.
    static void error_exit(int ires, const char *msg)
         mtaLog("%s%s%s", (msg ? msg : ""), (msg ? "; " : ""),
         mtaStrError(ires,0));
         exit(1);
    msgsr_clamav.cnf
    DEBUG=1
    BAD_MIME_TYPES=application/vbscript
    BAD_FILE_TYPES=bat,pif,vb,vbs,chs,exe************************************************
    broken message
    Return-path: <[email protected]>
    Received: from virusscan-daemon.apple.california.com by apple.california.com
    (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
    id <[email protected]> for [email protected]; Thu,
    20 Apr 2006 07:30:13 -0700 (PDT)
    Received: from california.com ([209.159.129.16])
    by apple.california.com (Sun Java System Messaging Server 6.2-3.04 (built Jul
    15 2005)) with ESMTP id <[email protected]> for
    [email protected]; Thu, 20 Apr 2006 07:30:05 -0700 (PDT)
    Received: from [61.23.221.222] by apple.california.com (mshttpd); Thu,
    20 Apr 2006 14:30:05 +0000 (GMT)
    Content-return: allowed
    Date: Thu, 20 Apr 2006 14:30:05 +0000 (GMT)
    From: [email protected]
    Subject: Re: testing
    In-reply-to: <[email protected]>
    To: [email protected]
    Message-id: <[email protected]>
    MIME-version: 1.0
    X-Mailer: Sun Java(tm) System Messenger Express 6.2-3.04 (built Jul 15 2005)
    Content-type: multipart/alternative;
    boundary="Boundary_(ID_iOVR4MBjhWJn/mh7Ij+BUQ)"
    Content-language: en
    X-Accept-Language: en
    Priority: normal
    References: <[email protected]>
    Original-recipient: rfc822;[email protected]
    This is a multi-part message in MIME format.
    --Boundary_(ID_iOVR4MBjhWJn/mh7Ij+BUQ)
    Content-type: text/plain; charset=us-ascii
    Content-transfer-encoding: 7bit
    Content-disposition: inline
    Data is missing from here
    ----ec04832708e231d6e2f
    --Boundary_(ID_iOVR4MBjhWJn/mh7Ij+BUQ)
    Content-type: text/html; charset=us-ascii
    Content-transfer-encoding: quoted-printable
    Content-disposition: inline
    Data is missing from here
    nal Message -----=3Cbr=3EFrom=3A chales=40california=2Ecom=3Cbr=3EDate=3A=
    Thursday=2C April 20=2C 2006 11=3A19 pm=3Cbr=3ESubject=3A testing=3Cbr=3E=
    To=3A chales=40california=2Ecom=3Cbr=3E=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B=
    3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B 5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B=
    7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B 9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B=
    1=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B 3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B=
    5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B 7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B=
    9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B 1=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B=
    3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B 5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B=
    7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B 9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B=
    1=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B 3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B=
    5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B 7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B=
    9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B 1=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B=
    3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B 5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B=
    7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B 9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B=
    1=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B 3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B=
    5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B 7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B=
    9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B 1=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B=
    3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B 5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B=
    7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B 9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B=
    1=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B 3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B=
    5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B 7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B=
    9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B 1=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B=
    3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B 5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B=
    7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B 9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B=
    1=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B 3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B=
    5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B 7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B=
    9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B 1=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B=
    3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B 5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B=
    7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B 9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B=
    1=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B 3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B=
    5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B 7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B=
    9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B 1=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B=
    3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B 5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B=
    7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B 9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B=
    1=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B 3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B=
    5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B 7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B=
    9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B 1=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B=
    3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B 5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B=
    7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B 9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B=
    1=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B 3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B=
    5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B 7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B=
    9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B =3Cbr=3E=26gt=3B
    ----ec04832708e231d6e2f
    --Boundary_(ID_iOVR4MBjhWJn/mh7Ij+BUQ)
    Content-type: text/x-vcard; name=chales.vcf; charset=us-ascii
    Content-transfer-encoding: base64
    Content-disposition: attachment; filename=chales.vcf
    Content-description: Card for <[email protected]>
    bA0KdGVsO3dvcms6NTEwLTI4Ny04NDUwDQp1cmw6aHR0cDovL3d3dy5jYWxpZm9ybmlh
    LmNvbS8NCm9yZzpDYWxpZm9ybmlhQ29tLCBJbmM7DQp2ZXJzaW9uOjIuMQ0KZW1haWw7
    aW50ZXJuZXQ6Y2hhbGVzQGNhbGlmb3JuaWEuY29tDQp0aXRsZTpTeXN0ZW0gQWRtaW5p
    c3RyYXRvcg0KZW5kOnZjYXJkDQo=
    ----ec04832708e231d6e2f--
    Boundary_(ID_iOVR4MBjhWJn/mh7Ij+BUQ)

    Ok, so it's not my code. Using the virus_scanner_simple.c example from SUN, if you change the decode_inspect routine to return MTA_OK for every call (which should technically just let the message pass) it has the same behavior as my program. (Not all that suprising since mine is a derivative of said program)
    That said, this now looks like a library issue. I'm using Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005) according to the SMTP prompt, and was wondering if perhaps I should apply:
    http://sunsolve.sun.com/search/document.do?assetkey=1-21-118207-42-1&searchclause=6306404
    The issue seems to be in the mtaDecodeMessage function, and occurs when the decode_inspect function is allowed to parse the message body, not just the message headers.
    The machine is a Sun Ultra 4500 running Solaris 10. Here's the banner:
    SunOS cookie 5.10 Generic_118822-23 sun4u sparc SUNW,Ultra-Enterprise
    Has anyone else had similar problems using the MTA SDK? Is there anything I'm missing here (besides the above mentioned patch) that might fix this?

  • ADF Unable to filter / sort date column in table

    Hi,
    I am using JDeveloper 11.1.1.7.
    I have a read only table inside a panel collection. One of the columns in the table is a date field. I have filterable and sortable properties set to true for all columns. Filter and sort property works for all columns expect the date column. The filter and sort options is not even shown for the date field (shown below).
    <af:column headerText="#{bindings.ASRTCreateRequestVO1.hints.CreationDate.label}"
                                             id="c7" sortable="true" width="100"
                                             filterable="true">
                                    <af:outputText value="#{row.CreationDate}"
                                                   id="ot7">
                                      <af:convertDateTime pattern="#{bindings.ASRTCreateRequestVO1.hints.CreationDate.format}"/>
                                    </af:outputText>
                                  </af:column>
    Please let me know if I am missing anything here.
    Thanks,
    Ashwin

    Hi Ashwin,
    As mentioned by Timo, for me also the filtering is working as usual.
    But while browsing through the ADF UI Guide I came across with below note
    If you want to use a component other than an inputText component for your filter (for example, an inputDate component), then instead of setting filterVisible to true, you can add the needed component to the filter facet.
    To do so:
    1. In the Structure window, right-click the column to be filtered and choose Insert inside af:column > JSF Core > Filter facet.
    2. From the Component Palette, drag and drop a component into the facet.
    3. Set the value of the component to the corresponding attribute within the FilterableQueryDescriptor class created in Step 1(not above step but you can find it in pg:390). Note that the value must take into account the variable used for the row, for example:
    #{af:inputDate label="Select Date" id="name" value="row.filterCriteria.date"}.
    This is in the section: 12.5.1 How to Add Filtering to a Table(pg:390).
    I hope it helps.
    Regards,
    Peddi.

  • Cover flow and album sort issues

    I just got a 80GB iPod classic for Christmas and I have noticed some annoying differences between iTunes cover flow and iPod cover flow:
    1. In iTunes cover flow, when you have songs with "Unknown Album", they clutter up the cover flow for each artist. In iPod cover flow, they are sent to the back of the cover flow in a nice little "Various Artists" cover. I like how this works on the iPod better.
    2. iTunes cover flow sorts by album artist, so you don't see a separate album for each non-album artist song.
    For example: If I set my album artist for the Saturday Night Fever soundtrack to "Saturday Night Fever" (don't ask why, this is how i like it sorted) then I will only see one "Saturday Night Fever" rather than one for Bee Gees, one for Kool & the Gang, etc.
    iPod cover flow sorts by artist, so you see a separate album for each non-album artist song. I like the way this works in iTunes better.
    3. When sorting by "Album by Year" in iTunes, syncing the iPod doesn't seem to follow the same sorting. Albums are still sorted on the iPod alphabetically. I want them to sort by year on my iPod.
    So I would appreciate it if someone could help me with all 3 of these issues. As you can see, sometimes iTunes is better for me, sometimes iPod is better for me.

    3. Playlists should be sorted in the same way as they are in iTunes. The Cover Flow order is fixed.
    This is not the case, at least not with iTunes 7.5.0.20 and my 80GB Classic running 1.0.3 on it (current version as of this writing). In iTunes, under LIBRARY, I select Music, and I have my music sorted via *Album by Year*. This works perfectly in iTunes. I'll use my Soundgarden library as an example, as it shows the problem nicely.
    *_iTunes order_:*
    Ultramega OK
    Louder Than Love
    Screaming Life/Fopp
    Badmotorfinger
    Superunknown
    Songs From The Superunknown
    Down on the Upside
    A-Sides
    That's ordered by date and is perfect. +Ultramega OK+ was released way back in 1988, while A-Sides was released nearly 10 years later in 1997. In Cover Flow View it works great. However, in the iPod it's sorted alphabetically, which is completely wrong:
    *_iPod Classic_:*
    A-Sides
    Badmotorfinger
    Down on the Upside
    Louder Than Love
    Screaming Life/Fopp
    Songs From The Superunknown
    Superunknown
    Ultramega OK
    This is totally wrong. And I haven't yet found a way to force it.
    Apple, please, this shouldn't be that difficult.

  • Expression Filter Performance Issues / Misuse?

    I'm currently evaluating the Expression Filter functionality for a new requirement. The basic idea of the requirement is that I have a logging table that I want to get "interesting" records from. The way I want to set it up is to exclude known, "uninteresting", records or record patterns.
    So as far as an implementation I was considering a table of expressions that contained expression filter entries for the "uninteresting" records and checking this against my logging table using the EVALUATE operator and looking for a 0 result.
    In my testing I wanted to return results where the EVALUTE operator is equal to 1 to see if my expressions are correct. In doing this I was experiencing significant performance issues. For example my test filter matches 72 rows out of 61657 possible entries. It took Oracle almost 10 minutes to evaluate this expression. I tried it with and without an Expression Filter index with no noticeable change in execution time. The test case and query is provided below.
    Is this the right use case for Expression Filter? Am I misunderstanding how it works? What am I doing wrong?
    Test Case:
    Version
    BANNER
    Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
    PL/SQL Release 11.2.0.1.0 - Production
    CORE    11.2.0.1.0      Production
    TNS for 32-bit Windows: Version 11.2.0.1.0 - Production
    NLSRTL Version 11.2.0.1.0 - Production
    Objects & Query:
    CREATE TABLE expressions( white_list VARCHAR2(200));
    CREATE TABLE data
    AS
    SELECT OBJECT_ID
         , OWNER
         , OBJECT_NAME
         , CREATED
         , LAST_DDL_TIME
    FROM   DBA_OBJECTS
    BEGIN
      -- Create the empty Attribute Set --
      DBMS_EXPFIL.CREATE_ATTRIBUTE_SET('exptype');
      -- Define elementary attributes of EXF$TABLE_ALIAS type --
      DBMS_EXPFIL.ADD_ELEMENTARY_ATTRIBUTE('exptype','data',
                                            EXF$TABLE_ALIAS('test_user.data'));
    END;
    BEGIN
      DBMS_EXPFIL.ASSIGN_ATTRIBUTE_SET('exptype','expressions','white_list');
    END;
    INSERT INTO expressions(white_list) VALUES('data.owner=''TEST_USER'' AND data.created BETWEEN TO_DATE(''08/03/2010'',''MM/DD/YYYY'') AND TO_DATE(''08/05/2010'',''MM/DD/YYYY'')');
    exec dbms_stats.gather_table_stats(USER,'EXPRESSIONS');
    exec dbms_stats.gather_table_stats(USER,'DATA');
    CREATE INDEX expIndex ON Expressions (white_list) INDEXTYPE IS EXFSYS.EXPFILTER
      PARAMETERS ('STOREATTRS (data.owner,data.object_name,data.created)
                   INDEXATTRS (data.owner,data.object_name,data.created)');
    SELECT /*+ gather_plan_statistics */ data.* FROM data, expressions WHERE EVALUATE(white_list,exptype.getVarchar(data.rowid)) = 1;
    DROP TABLE expressions PURGE;
    BEGIN
            DBMS_EXPFIL.DROP_ATTRIBUTE_SET(attr_set => 'exptype');
    END;
    DROP TABLE data PURGE;

    Hi,
    If you are already using the queries and are stable enough then rather than modifying query you can try other options to improve the query performance like data compression of the cube, creation of aggregates, placing cube on BIA or creating cache for the query.
    Best Regards,
    Prashant Vankudre.

Maybe you are looking for

  • Free goods- Sales Order Quota for a customer

    Dear Experts I want to restrict the Quota of an free SKU ( Material) to a specific customer. For Eg:-- If a Distributor limit is set for a Consumer Offer as 100 CS. Once the 100 CS is exceeded, System must stop further orders of the item on the Same

  • Terminating threads

    Hi, I have developed a simple program to test executor service and executors for thread pool creation and management. The program executes fine until I call the shudown() method. The Executor is shutdown but the threads still remain alive (verified b

  • Is it possible to use commerce server with netscape webserver and weblogic app server

    Hello, We want to use Netscape webserver using NSAPI plug-in with WLS 5.1. In this scenario can we get full functionality of Weblogic Commerce server 2.0.1 if we wnat to use above setup. This is urgent please. surya

  • Session id  as part of URL

    Hi I am using WAS5.0 . I want to modify the URL so tht the session id becomes part of URL and request.isRequestedSessionId() should be same as it is displayed in the URL.

  • I am a new developer in iOS, need info about iTunes Store

    I am a new developer in iOS, I have created an weather app just to show recruiters about my work and to get the work or job from them. This is not for sale, i know apple provide built in weather app. Can i add this app to iTunes store.