Parsing sh/bash scripts: Get all executable/function calls out of it

I'm doing some analysing of some code written in bash.
Now I must know all the "things" that are executed (or can be executed) from inside the script, without executing the script.
So basically the script must be parsed and all the occurrences of executions of programs and sh functions must be listed.
Does anyone know if there is a tool/script for this somewhere?
Thanks.
Last edited by Dieter@be (2008-11-08 15:12:07)

First you should know that it's impossible to get a guaranteed-correct answer without executing the script. Scripts can call programs/functions whose names are found/generated at runtime. The most common example is opening a text file using the program whose name is stored in $EDITOR.
That said, you can get an approximation by writing a parser. Parsers are hard. Smart programmers use a parser generator like bison or ANTLR to abstract away much of the complexity, but it's still sort of a pain in the butt the first time or two.
If you don't want to write a parser, a very approximate answer can be found by splitting each line by whitespace and returning the first word. Then finding other places commands can hide, like after semicolons, backticks, "$(", etc, but not when quoted. At this point, you will have written a very shoddy parser and taken longer at it than you would have if you'd bothered to learn bison or ANTLR.
Last edited by skymt (2008-11-08 15:34:36)

Similar Messages

  • Parse XML: how to get all the sub nodes of an element

    Hello, I am using org.w3c.dom to parse an XML file. I want to get all the information under an elements, including all the sub nodes and sub sub nodes, maybe output as a String or String[ ]. How should I do it with org.w3c.dom?
    e.g. I want to get all the text within<datafile></datafile>:
    <datafile>
    blablabla
    <id> bla <description>bla</description></id>
    </datafile>
    I write:
    Node element = InterfaceDOM.getElementsByTagName("datafile");
    how can I return all the sub content within this element?
    Thanks a lot!

    http://www.developerfusion.co.uk/show/2064/

  • Using iTunesU, all GET ALL icons are grayed-out!!!

    Dear iTune Friends,
    I have been recently downloading courses from iTunesU, until recently when...
    I discovered that after double-clicking the course-photo, the GET ALL icon appears normally. But after a few seconds, it turns gray and will not respond to any or all mouse-clicks.
    It happens every where that I go, Arizona State, Stanford, The Open University, Yale and even Oxford.
    I am using iTunes 10.1.1 and Mac OSX 10.6.6.
    Not a single thing has changed, it suddenly began happening and Apple Tech is, as usual, non-responsive.
    Could someone please direct me onto the correct pathway for resolution?
    Best Regards,
    Robert O. Cobb, PhD

    There are already about 3 threads on this. Known issue and we're working on a fix/update for it.

  • DLL Wrapper works when functions called out of main(), not from elsewhere?

    Hello all,
    I am currently trying the JSAsio wrapper out ( http://sourceforge.net/projects/jsasio )
    Support on this project is nearly unexisting and a lot of people seem to complain that it doesn't work well.
    It works very nicely here, I wrote a few test classes which called some functions (like playing a sound or recording it) and had no problems whatsoever.
    These test classes were all static functions and ran straight out of the main() method and printed some results to the console.
         public static void main(String[] args)
              boolean result = callFunction();
              .. end..
         public static boolean callFunction()
              initASIO();
              openASIOLine();
              return true;
         }The results were all great!
    Then I tried to implement these test classes into my swing-based applications. So I want to call these same functions, as in the test classes, as a result of any user action (for example, selecting the asio driver in a combobox) But then these asio driver functions just stop to work. I get errors saying that the ASIO driver is not available. (meaning that the dll wrapper loads the wrong asio driver or can't load one at all)
    The library path and classpath are all set correctly, exactly the same as the test classes. Even copied the test code word for word in to my swing applications but it still will not work. I am calling these functions in a new Thread, and even put them in a static methods to try and get that working. When calling these asio methods from the main() method AFTER I set up my components gives me the desired results as well. But as soon as I call these same methods (which are in the same class) from a swing event, it fails;
    public class ASIOTest
         public static void main(String[] args)
              ASIOTest test = new ASIOTest();
              test.callFunction(); // <-- WORKS
         public ASIOTest()
              initializeComponents();
         private void initializeComponents()
              frame = new JFrame();
              choices = new JComboBox();
              choices.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent event)
                     // user made selection
                    new Thread(
                            new Runnable() {
                                public void run() {
                                    try
                                         callFunction(); // <-- DOES NOT WORK
                                    catch (Exception e)
                                        e.printStackTrace();
                            }).start();
         public void callFunction()
              initASIO();
              openASIOLine();
    }Is there something fundamental I am missing here?
    For what reasons can an application which uses JNI functions go wrong when working in a swing enviroment? (and out of a static context, although this does not seem to make any difference, eg. when calling these functions from static methods inside another class, inside a new thread when the user has generated an event)
    I am hoping someone could point me in the right direction :-)
    Thank you in advance,
    Steven
    Edited by: dekoffie on Apr 21, 2009 11:11 AM
    Edited by: dekoffie on Apr 21, 2009 11:16 AM

    jschell wrote:
    Two applications.
    And you probably run them two different ways.
    The environment is different so one works and the other doesn't.Thank you for your fast reply!
    Well, I am running the "updated" version from the same environment; I copied the jframe, and a jcombobox into my original test class which only ran in the java console. Consider my second code example in my original post as the "updated" version of the first code example. And as I pointed out, it works fine when I call the jni functions in the main method, but not when I call it from inside the ActionListener.
    Or am I again missing something essential by what you mean with a different environment? The classpath and the working directory is exactly the same, as is the Djava.library.path option. :-)
    Thanks again!

  • Where i can get all test functions and details of those function

    Hai
    Actually i was a beginner in teststand can any one tell me where i can download the test functions details list ,the datatype of those function,
    Thankyou

    Hi,
    Not sure what you are after!!!
    Have you tried the TestStand Programmer Help or any of the User Manuals.
    Regards
    Ray Farmer
    Regards
    Ray Farmer

  • I have an unlocked iphone 3gs running ios 6.0 currently with straight talk. I was able to get all the functions working except mms.Do you think this issue will be resolved ? I really would like that option on my phone. I have tried everything.

    Can't get mms. to work have, tried everything I have found online.ST tells me it's Apples' problem Apple tells me it's STs' problem.Does anyone think this issue will be resolved ? My phone is an Apple unlocked 3gs running ios 6.0 on Straight Talk using atts' towers.

    I am having the same problem but cannot get anything but the actual phone to work.  I have a unlocked 3GS running 6.0 (what was I thinking?).  No data whatsoever, no texting, no visual voicemail.  I simply cannot access the APN settings.  I have tried sim swap, I have tried APN changers.  I have been on the phone with ST tech support for hours and hours.  I have tried to get the answers from a "genius".  I am stuck and looking at Android devices, but would really like to keep using the iphone with Straight Talk.

  • Get all the function button in SET_TABLE_FOR_FIRST_DISPLAY

    Hi Guys,
    I've used the the method SET_TABLE_FOR_FIRST_DISPLAY to display my ALV. Unfortunately, icons like TOTAL, FILTER..... that are availble in SET_TABLE_FOR_FIRST_DISPLAY is not working. Kindly please provide me answer why the icons are not working. Below is my code. Did I miss something? Helpful advise will be rewarded. Thanks!!
    CREATE OBJECT CC_OBJ
        EXPORTING
    *      PARENT                      =
          CONTAINER_NAME              = 'CC_OBJ'
    *      STYLE                       =
    *      LIFETIME                    = lifetime_default
    *      REPID                       =
    *      DYNNR                       =
    *      NO_AUTODEF_PROGID_DYNNR     =
        EXCEPTIONS
          CNTL_ERROR                  = 1
          CNTL_SYSTEM_ERROR           = 2
          CREATE_ERROR                = 3
          LIFETIME_ERROR              = 4
          LIFETIME_DYNPRO_DYNPRO_LINK = 5
          OTHERS                      = 6
      IF SY-SUBRC <> 0.
        MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                   WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
      CREATE OBJECT OBJ_ALV_GRID
        EXPORTING
    *      I_SHELLSTYLE      = 0
    *      I_LIFETIME        =
          I_PARENT          = CC_OBJ
    *      I_APPL_EVENTS     = space
    *      I_PARENTDBG       =
    *      I_APPLOGPARENT    =
    *      I_GRAPHICSPARENT  =
    *      I_NAME            =
    *      I_FCAT_COMPLETE   = SPACE
        EXCEPTIONS
          ERROR_CNTL_CREATE = 1
          ERROR_CNTL_INIT   = 2
          ERROR_CNTL_LINK   = 3
          ERROR_DP_CREATE   = 4
          OTHERS            = 5
      IF SY-SUBRC <> 0.
        MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                   WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
    * CALLING THE CREATED INSTANCE TO METHOD
      CALL METHOD OBJ_ALV_GRID->SET_TABLE_FOR_FIRST_DISPLAY
       EXPORTING
    *    I_BUFFER_ACTIVE               =
    *    I_BYPASSING_BUFFER            =
    *    I_CONSISTENCY_CHECK           =
          I_STRUCTURE_NAME              = 'SFLIGHT'
    *    IS_VARIANT                    =
    *    I_SAVE                        =
    *    I_DEFAULT                     = 'X'
    *    IS_LAYOUT                     =
    *    IS_PRINT                      =
    *    IT_SPECIAL_GROUPS             =
    *    IT_TOOLBAR_EXCLUDING          =
    *    IT_HYPERLINK                  =
    *    IT_ALV_GRAPHICS               =
    *    IT_EXCEPT_QINFO               =
    *    IR_SALV_ADAPTER               =
        CHANGING
          IT_OUTTAB                     = IT_SFLIGHT
    *    IT_FIELDCATALOG               =
    *    IT_SORT                       =
    *    IT_FILTER                     =
      EXCEPTIONS
        INVALID_PARAMETER_COMBINATION = 1
        PROGRAM_ERROR                 = 2
        TOO_MANY_LINES                = 3
        OTHERS                        = 4
      IF SY-SUBRC <> 0.
        MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                   WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
    * FREE MEMORY FOR ALV GRID AND CLASS CL_GUI_CFW.
      CALL METHOD OBJ_ALV_GRID->FREE.
      CALL METHOD CL_GUI_CFW=>FLUSH.
      CALL SCREEN '0100'.
    Regards,
    Mark

    Thanks for your reply but I got it by myself. Actually, It is automatic that the controls of the ALV is active. The only problem is my logic. Below should be done.
    *CALL SCREEN '0100'.
    CALL METHOD OBJ_ALV_GRID->FREE.
    CALL METHOD CL_GUI_CFW=>FLUSH.*

  • HT5500 How do I get all my facebook friends OUT of my icloud contacts?

    This is a HUGE problem for me.  I don't know what setting I change to ull my facebook friend info into my icloud contacts files on all devices, but I want to reverse it and make them gone!!!!  GONE I say.  If someone thought this was a good idea and it was a universal update, they must have been on LSD.  I DO NOT want to look at the names of every person I've ever known when looking for critical numbers to do the business of my life...work, home and family.  That obscure person I saw at the the last high school reunion is just clogging up my contacts database and wasting my time.  WASTING MY TIME...is that what you want to do apple?  Stop changing things just to make them different!  If it aint broke, DON't fix it!  PLEASE!  Ever since Mountain LIon came out I am increasingly annoyed by these nuisance matters that demand my time energy and attention.
    So, now that I have voiced my frustration, how do I get these facebook names OUT of my icloud contacts!  You tell us how to bring them in, but no where that I can find, how to get them out.  It's time to clear this up in a simple, easy to follow set of instructions.  Start with, do I do it on my imac or on my iphone, since I suspect it was an iphone setting that caused the problem.
    I see no setting on the iphone to reverse this problem.  Please direct me.

    Thanks to everyone for your replies.  I am continually amazed at how specific to each device these settings can be, or at least how specific they can seem.  chrisfromgastonia, I did figure out that unchecking contacts in the facebook settings on my iphones solved the bulk of the problem.  However, there wasn't a facebook groups to uncheck in my list of groups.  Likewise Smith121, there was no facebook account enabled in my contacts application on my computer, so I could not do that.  However, I do have another groups related question.  Ever since this last update pulled all my facebook contacts into my synchronized contacts, the groups function on my contacts doesn't work anywhere.  All that happens is that if I try to access a specific group, the check mark beside the name of the group gets unchecked.  I used to be able to select a group and then have the full list of members of the group come up and only those names.  No more, there is no accessing the members of the groups, only the names of the groups to look at which does NOTHING AT ALL to help me.  Any ideas?  Advice?

  • How do I get all vestiges of Firefox out of my iMac? See "Details."

    A day or two ago when I clicked on the Firefox icon nothing happened. So I figured it was an aberration and used Safari. But getting back to Firefox later I still did not the opening screen. The "Help" site was no help, but I stumbled on "Restart with Add=ons Disabled" thinking it might do something. The result was the question "Are you sure you want to disable all add-ons and restart?" but neither the Cancel nor Restart buttons function. The little Apple wheel just keeps turning. Can you tell me how to get rid of Firefox, hoping it will take the "Restart......" box off my screen? Thank you. Jack Gates

    Welcome....
    Download the following:
    https://appservices.wyse.com/pages/serviceandsupport/support/dlOraFW.asp?which=1 06&model=Wyse%20PocketCloud%28Software%20Downloads%29
    Unzip, Mount and run the uninstaller.
    Regards,
    Shawn

  • Iphone 4s not getting all email from 2 out of 3 accounts

    I have an I phone 4S and have two POP3 accounts and a gmail account set up.the two POP 3 accounts have suddenly stopped pushing all of the received emails to the iphone.
    I used to receive them on the phone and computer at the same time. Last two days this has not occurred. I am worried as of course the POP 3 accounts are related to my business.
    Any thoughts or help is appreciated.

    Hi,
    I've found something that solve the problem imediately, maybe you could try.
    On the Web go to your yahoo account, on the french interface, on the top right corner there is a dropdown menu "options" with a "other options" entry, select, you get a page and the left part, select "POP Acces and Transfert" and check the firt radio button, that accept the POP access.
    Just selct another entry from the left and save and disconnect.
    And it works immediatly, perhaps you will have to recreate your account on the iphone or ipad, but I don't have to.
    I apologize for my poor english, I hope you understand.
    Regards
    Philippe

  • Why would someone launch a newer version and not get all of the bugs out first?

    Facebook will not load. Email will not load. Nothing will load. Firefox is not compatible with my anti-virus, so it disabled. All Adobe files were lost in the download process. FF is running soooo slow. I uninstalled FF and now cannot reinstall. When I go to mozilla.com there in no "download now" button. What is up with this?

    Warranties do not cover damage

  • Phone unable to get text messages or call out?

    Today my phone stopped accepting or sending text messages and it stopped taking calls and sending calls. I've restarted it and rebooted and turned it off and on and have done everything in my power that I can think of. What's going on and what do I need to do? (I'm up to date on billing so it's not that) It also says that I have full signal and 3G.

        Hi Schaem94,
    Yikes! No service is no good! It's important to have a working phone at all times. Let's get this fixed. What happens when you attempt to place a call? Any error message? Any liquid or physical damage to the device? Try a soft reset to the device http://bit.ly/tXe7I4. The device sounds like the software is frozen, and a soft reset will reset refresh the system. Keep me posted.
    Thanks,
    Pamelaf_vzw
    Tweet us @vzwsupport

  • [SOLVED] XMMS2 media hotkeys, bash scripts

    Hi!
    For the really beginners of the XMMS2 users as me, should be a nice something like a guide/tutorial.
    Here is the bash scripts that might enchant functionality and be more useful for use of the media keys.
    For randomizing before any other action you can use even something like:
    xmms2 playlist shuffle ; xmms2 jump 1; xmms2 play
    # Just for dummies
    The Preview hotkey loop.
    From the begin of the playlist to the end of it when current is the first one being played:
    #!/bin/bash
    #Play the previews or first if end of the playlist
    if [ "XX"$(xmms2 prev | awk '{print $1}') == "XXServer" ] ; then
    if [ "XX"$(xmms2 jump $(xmms2 list | grep -i '/' |wc -l) | awk '{print $1}') == "XXServer" ] ; then
    xmms2 playlist list;
    echo The playlist is empty, please choose one from of the above ;
    echo or add a new songs to the playlist with a '"xmms2 add"';
    fi; fi;
    #It takes time to count to the last song in the playlist, longer it is more time it takes :(. I haven't found a better way yet.
    The Next hotkey loop.
    When the end of the playlist is reached then goto jumping to the first one song in the playlist:
    #!/bin/bash
    #Play the first song if in the end of the playlist
    if [ "XX"$(xmms2 next | awk '{print $1}') == "XXServer" ] ; then
    if [ "XX"$(xmms2 jump 1 | awk '{print $1}') == "XXServer" ] ; then
    xmms2 playlist list;
    echo The playlist is empty, please choose one from of the above ;
    echo or add a new songs to the playlist with a '"xmms2 add"';
    fi; fi;
    For the Play/Pause key:
    #!/bin/bash
    #For the single Play/Pause key
    GetStatus=$(xmms2 current | awk -F":" '{print $1}')
    #Any command line parameters to the script for randomizing of the playslist.
    if [ "S" != "S"$1 ] ; then
    xmms2 playlist shuffle
    fi;
    if [ "$GetStatus" == "Playing" ]; then xmms2 pause;fi
    if [ "$GetStatus" == "Paused" ]; then xmms2 play;fi
    if [ "$GetStatus" == "Stopped" ]; then
    xmms2 play
    GetStatus=$(xmms2 current | awk -F":" '{print $1}')
    if [ "$GetStatus" == "Stopped" ]; then
    xmms2 playlist list;
    echo The playlist is empty, please choose one from of the above ;
    echo or add a new songs to the playlist with a '"xmms2 add"';
    fi
    fi
    or you can use even xmms2 toggle command line for the play/pause hotkey.
    Turn On/Off repeat/loop of the playlist:
    #!/bin/bash
    GetStatus=$(xmms2 server config playlist.repeat_all )
    case $GetStatus in
    "playlist.repeat_all = 1") xmms2 server config playlist.repeat_all 0 ; sudo beep; echo is OFF ;;
    "playlist.repeat_all = 0") xmms2 server config playlist.repeat_all 1 ; sudo beep ; sudo beep ; echo is ON;;
    esac
    You can install beep but the beep has a problem, you can run it only as a root but a more danger way is to by pass this by adding the beep into /etc/sudoers , e.g. yourusername ALL=NOPASSWD: /usr/sbin/beep.  Be careful! It may expose your system for unwanted access to and do a harm. The best way is to find a better way for notification of changes.
    If someone has another script solutions for the multimedia hotkeys or media fun for XMMS2 then please share with us!
    Automation is power of the shell
    Notice
    The hotkey names of my Digital Media Keyboard 3000, but I think that it becomes more as a standard, it is just to get a faster access to the names.
    XF86AudioPlay, XF86AudioNext, XF86AudioPrev,XF86AudioStop
    XF86AudioMute (amixer -c 0 set Master toggle), *, (pactl set-sink-mute 0 toggle)
    XF86AudioRaiseVolume (amixer -c 0 set Master 3+), xmms2 server volume +3, (pactl set-sink-volume 0 +3%)
    XF86AudioLowerVolume (amixer -c 0 set Master 3-). xmms2 server volume -3, (pactl set-sink-volume 0 -- -3%)
    amixer = ALSA
    pactl = PulseAudio (0 is index of the sinks, you can see which you can use with pacmd list-sinks, marked with * is default)
    The other way to increase and decrease volumes is here.
    Change between ALSA and PulseAudio sound servers for XMMS2
    nyxmms2 server config output.plugin pulse
    nyxmms2 server config output.plugin alsa
    Otherwise you can use xev to retrieve the names of the supported keys by X server, as I know X server has a limitations to the 255 key numbers/keycodes. One more but less useful for GUI is showkey, just to know that it is also and always exists, with a great manual about the kbd keys.
    * To mute/unmute XMMS2 you can use xmms2 server volume 0 / xmms2 server volume 100 or for more advanced e.g. xmms2 server volume -c left 100/xmms2 server volume -c right 100 and combine with any keys you wish the way is best for you. I haven't found any way to make anything to remember status after mute/unmute of xmms2. Alias for the mute only is xmms2 mute. If you will find it before me please help .
    Here is one more guide for the BlackBox menu. I could not get xmms2 mlib loadall to work in Arch.
    In Arch you must use xmms2 playlist sort instead of xmms2 sort because it doesn't work otherwise.
    xmms2 playlist sort album
    xmms2 playlist sort title
    xmms2 playlist sort artis
    Last edited by Andy_Crowd (2014-10-18 11:34:45)

    Zariel wrote:
    i guess something like this?
    %optical ALL=(ALL) NOPASSWD: ALL
    I found the clues for this in the sudoers manual:
    handy   ALL = NOPASSWD: /sbin/umount /CDROM,\
                    /sbin/mount -o nosuid\,nodev /dev/cd0a /CDROM
    Which works in so far as now mounting no longer needs the password.
    Which leaves me with the problem of trying to understand how to get Worker to mount the optical drive on command.
    If I enter the bash command in the Terminal as follows:
    mount /mnt/dvd
    the media is mounted, after which I can push the button in Worker, which I have configured with:
    /mnt/dvd
    & the root list of the optical media is displayed in the active panel of Worker.
    I just haven't been able to get Worker to use "mount /mnt/dvd" yet, there will be a way, I wonder how long it will take me to find it? lol
    Last edited by handy (2008-11-19 06:48:09)

  • How do I save a "bash" script? (in attempt to fix one of my other problems)

    Here is my original problem:
    http://discussions.apple.com/thread.jspa?threadID=2195627&tstart=0
    I came across this that sounds like it will help my issue:
    http://www.macosxhints.com/article.php?story=20090316190817357
    However, what am I supposed to do with that code? Put it in the Terminal? Save it as an Apple Script? I also got the "lingon" program set up, all I need to do is figure how how to save this "bash" script and all set!
    Any ideas?
    -Scott

    This link might help as it shows how to create the plist using lingon:
    http://mymacfixes.blogspot.com/2009/06/how-do-i-stop-clicking-noise-from-hard.ht ml

  • Getting Virtual Function Call runtime error R6025 from iexplore.exe

    Hi all,
    I am getting an virtual function call runtime error from iexplore.exe. The IE will then crash. I have checked the log in java console. It shows
    basic: Removed progress listener: sun.plugin.util.GrayBoxPainter@4607b5
    basic: Finding information ...
    basic: Releasing classloader: sun.plugin.ClassLoaderInfo@314585, refcount=3
    basic: Done ...
    basic: Joining applet thread ...
    basic: Destroying applet ...
    basic: Disposing applet ...
    basic: Quiting applet ...
    basic: Joined applet thread ...
    basic: Unregistered modality listener
    --> basic: Stopping applet ...
    --> basic: Stopping applet ...
    basic: Removed progress listener: sun.plugin.util.GrayBoxPainter@cbb7db
    basic: Finding information ...
    basic: Releasing classloader: sun.plugin.ClassLoaderInfo@314585, refcount=2
    basic: Done ...
    basic: Joining applet thread ...
    basic: Destroying applet ...
    basic: Disposing applet ...
    basic: Quiting applet ...
    basic: Joined applet thread ...
    basic: Unregistered modality listener
    I have implemented the stop() in all the applet classes. However, I do not know where this stop() called?
    Also, from the java debugger, it always stops and shows:
    Exception occurred: java.lang.ThreadDeath (uncaught)"thread=TimerQueue", javax.s
    wing.TimerQueue.run(), line=-1 bci=63
    TimerQueue[1] cont
    >
    Exception occurred: java.lang.Exception (uncaught)"thread=main", sun.plugin.com.
    JavaClass.getIdForName(), line=-1 bci=72
    main[1] cont
    >
    Exception occurred: java.lang.Exception (uncaught)"thread=main", sun.plugin.com.
    JavaClass.getIdForName(), line=-1 bci=72
    main[1] cont
    >
    Exception occurred: java.lang.Exception (uncaught)"thread=main", sun.plugin.com.
    JavaClass.getIdForName(), line=-1 bci=72
    main[1] cont
    >

    What version of 5.0 are you running? There were some problems new in 5.0 seen mainly with the Java Plug-In and other apps which embed the JVM which were fixed in 5.0u6.

Maybe you are looking for