I'm trying to create a function to de-escalate sudo privileges.
I'm the maintainer of a the package dcli which is a dart package intended to replace bash.
https://pub.dev/packages/dcli
One of my objectives is to allow a user to de-escalate sudo privileges back to the original user's privileges for some parts of the code:
If we have a script called touch_me.dart
The user would run:
sudo touch_me
The touch_me.dart script would be:
void main() {
test('isPriviliged', () {
try {
print('isPriviliged: ${Shell.current.isPrivilegedUser}');
print('uid: ${getuid()}');
print('gid: ${getgid()}');
print('euid: ${geteuid()}');
print('euid: ${geteuid()}');
print('user: ${getlogin()}');
print('SUDO_UID: ${env['SUDO_UID']}');
print('SUDO_USER: ${env['SUDO_USER']}');
print('SUDO_GUID: ${env['SUDO_GID']}');
print('de-escalating to: uid: $originalUID, gid: $originalGID');
print('pre-descalation euid: ${geteuid()}');
print('pre-descalation user egid: ${getegid()}');
releasePrivileges();
print('post-descalation euid: ${geteuid()}');
print('post-descalation user egid: ${getegid()}');
touch('test.txt', create: true);
'ls -la test.txt'.run;
withPrivileges(() {
print('with privileges euid: ${geteuid()}');
print('with privileges egid: ${getegid()}');
touch('test2.txt', create: true);
'ls -la test2.txt'.run;
});
} on PosixException catch (e, st) {
print(e);
print(st);
}
});
}
bool get isPrivilegedUser {
return _whoami() == 'root';
}
/// revert uid and gid to original user's id's
void releasePrivileges() {
if (Shell.current.isPrivilegedUser) {
var sUID = env['SUDO_UID'];
var gUID = env['SUDO_GID'];
// convert id's to integers.
var originalUID = sUID != null ? int.tryParse(sUID) ?? 0 : 0;
var originalGID = gUID != null ? int.tryParse(gUID) ?? 0 : 0;
setegid(originalGID);
seteuid(originalUID);
}
}
/// Run [privilegedCallback] with root UID and gid
void withPrivileges(RunPrivileged privilegedCallback) {
var privileged = Shell.current.isPrivilegedUser;
if (!privileged) {
setegid(0);
seteuid(0);
}
/// run the callback method with escalated privileges.
privilegedCallback();
/// If the code was originally running privileged then
/// we leave it as it was.
if (!privileged) {
releasePrivileges();
}
}
typedef RunPrivileged = void Function();
Everything works as expected except for the change to the gid. Even though releasePrivileges calls setegid(SUDO_GID) and SUDO_GID is 1000 the created file gets a gid of 0.
isPriviliged: true
uid: 0
gid: 0
euid: 0
euid: 0
user: bsutton
SUDO_UID: 1000
SUDO_USER: bsutton
SUDO_GUID: 1000
de-escalating to: uid: 1000, gid: 1000
pre-descalation euid: 0
pre-descalation user egid: 0
post-descalation euid: 1000
post-descalation user egid: 1000
-rw-r--r-- 1 bsutton root 0 Jan 18 10:23 test.txt
with privileges euid: 0
with privileges egid: 0
-rw-r--r-- 1 root root 0 Jan 18 10:23 test2.txt
Edit:
Here is the simplest example that demonstrates the problem:
void main() {
var sUID = env['SUDO_UID'];
var gUID = env['SUDO_GID'];
// convert id's to integers.
var originalUID = sUID != null ? int.tryParse(sUID) ?? 0 : 0;
var originalGID = gUID != null ? int.tryParse(gUID) ?? 0 : 0;
setegid(originalGID);
seteuid(originalUID);
touch('test.txt', create: true);
'ls -la test.txt'.run;
}
And the problem was my testing environment :<
In early tests I had accidently created test.txt with gid = 0.
If I re-run the test, deleting test.txt before I start, the code works as expected :<
Related
i want to execute OS Command both windows and docker container (linux). When i control on windows every command which i entered work well because i can see output. When i build Dockerfile and run my app with container, send a few command i didn't take output what i expected.
My function is bellow.
public string RunCommand(string arguments)
{
var argsPrepend = "-c ";
var shellName = "/bin/sh";
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
shellName = #"C:\Windows\System32\cmd.exe";
argsPrepend = "/c ";
}
try
{
Process process = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = shellName,
Arguments = argsPrepend + arguments,
RedirectStandardOutput = true,
RedirectStandardError = true,
UseShellExecute = false,
}
};
process.Start();
string output = process.StandardOutput.ReadToEnd();
process.WaitForExit();
return output;
}
catch (Exception ex)
{
return ex.ToString();
}
}
When i send pwd and ls command it works well.
swagger-pwd
swagger-ls
When i want to execute "ls -la /" or "cat /etc/passwd" i didn't get right output.
swagger-ls-la
swagger-cat-etc-passwd
How can i execute OS Command over Docker Container ?
What's the problem which i make or i face ?
1 - If you can access the directories you are running your file in and not other root directories, then there is the problem of not being able to read the file. You may need to check if the user you are running the file from has access.
2 - You may need to take a look at the "SecurityContext" configurations. I don't know about container structures. Maybe it's hardening in itself as a precaution. You may need to give permission yourself.
Link : https://techcommunity.microsoft.com/t5/azure-developer-community-blog/hardening-an-asp-net-container-running-on-kubernetes/ba-p/2542224
Best Regards.
Thanks for your helping. After gave my all 2 days's time :) i solved at the end. After i changed function likes bellow, everything works well.
public string RunCommand(string arguments)
{
var shellName = "/bin/bash";
var argsPrepend = "-c ";
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
shellName = #"C:\Windows\System32\cmd.exe";
argsPrepend = "/c ";
}
try
{
Process process = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = shellName,
Arguments = argsPrepend + "\"" + arguments + "\"",
RedirectStandardOutput = true,
RedirectStandardError = true,
UseShellExecute = false,
}
};
process.Start();
string output = process.StandardOutput.ReadToEnd();
process.WaitForExit();
return output;
}
catch (Exception ex)
{
return ex.ToString();
}
}
I'm using the following script to pull data from bulk json files:
function importRegex(url, regexInput) {
var output = '';
var fetchedUrl = UrlFetchApp.fetch(url, {muteHttpExceptions: true});
if (fetchedUrl) {
var html = fetchedUrl.getContentText();
if (html.length && regexInput.length) {
output = html.match(new RegExp(regexInput, 'i'))[1];
}
}
// Grace period to not overload
Utilities.sleep(1000);
return output;
}
Then this formula with the desired URL in E3:
=IMPORTREGEX(E3,"(.*')")
It worked completely fine to begin with, now I'm suddenly getting the error, seemingly without making any changes, any tips?
This error is because of lacking a null check.
You are now using the return value of html.match() whether it is null or not.
So you should check if the return value is null and if it has enough length.
Like this:
if (html.length && regexInput.length) {
let match = html.match(new RegExp(regexInput, 'i'));
if ( match != null && match.length > 1 ){
output = match[1];
}
}
I have two methods to retrieve images on an ASP.NET MVC website. If I search for the images on disk using File Explorer, the image are there, but my log file shows many errors saying that each image does not exists.
Sometimes it works without issues but others, my application could not find the image. If I restart my IIS site or restart the computer, it works without any issues, but it has a random behaviour that I must resolve.
The two paths where the images are located are:
"C:\inetpub\wwwroot\Test_Application\Content\Images" (Inside site public dir)
"C:\Test_Application\images" (Configured on IIS as a virtual directory)
This is a Windows 10 Pro device, running IIS and the application pool that is running the site has a windows account with administrative rights as identity because I need to connect to a SQL Server LocalDb.
The function that writes the message to log is:
private bool Func_GetImages(RecordModel record)
{
bool bResult = false;
List<string> imagesFound = new List<string>();
string sImageMaskName = string.Empty;
string sAbsoluteImgPath = string.Empty;
string sSourceImgPath = string.Empty; //Path to img directory with year, month and day.
string sTargetImgPath = string.Empty;
try
{
Config.LogHelper.Func_WriteEventInLogFile(DateTime.Now.ToLocalTime(), enum_EventTypes.Debug, "Func_GetImages", "Get Images: ",
string.Format("Get images for record with GUID: {0}; Image Mask Name: {1}; Times for Images: {2}", record.GUID, record.imageMaskName,
record.TimeBetweenColorImages));
if (HttpContext.Current != null)
{
sAbsoluteImgPath = HttpContext.Current.Server.MapPath(Config.sImgDirectory);
sTargetImgPath = HttpContext.Current.Server.MapPath("~/Content/Images/Processed");
}
else
{
sAbsoluteImgPath = string.Format("{0}/", AppDomain.CurrentDomain.BaseDirectory);
sTargetImgPath = string.Format("{0}/", "~/Content/Images/Processed");
}
sSourceImgPath = Path.Combine(sAbsoluteImgPath, record.DetectionDatetime.Year.ToString(), record.DetectionDatetime.Month.ToString("D2"), record.DetectionDatetime.Day.ToString("D2"));
Config.LogHelper.Func_WriteEventInLogFile(DateTime.Now.ToLocalTime(), enum_EventTypes.Debug, "Func_GetImages", "Get Images: ",
string.Format("Path to search for files: {0}", sSourceImgPath));
sImageMaskName = record.imageMaskName;
if (!Directory.Exists(sSourceImgPath))
{
Directory.CreateDirectory(sSourceImgPath);
}
//Try to get files with this search pattern
imagesFound = Directory.GetFiles(sSourceImgPath, string.Format("{0}*", sImageMaskName)).ToList();
if (imagesFound.Count > 0)
{
Config.LogHelper.Func_WriteEventInLogFile(DateTime.Now.ToLocalTime(), enum_EventTypes.Debug, "Func_GetImages", "Get Images: Ok",
string.Format("Number of images for record with GUID: {0} is {1}", record.GUID, imagesFound.Count.ToString()));
//Create new image name
DateTime dateCapture = record.DetectionDatetime;
string sImageName = record.imageMaskName;
//Check if day directory exists. If not, create it
Func_CheckOrCreateImageDirectory(dateCapture);
string sBaseDirectory = Path.Combine(sTargetImgPath, dateCapture.Year.ToString(), dateCapture.Month.ToString("D2"), dateCapture.Day.ToString("D2"));
//Rename, add image header and copy blackWhiteImages
Func_ProcessImages(sBaseDirectory, sImageMaskName, sImageName, detection.numPicturesColor, enum_ImagesType.COLOR, detection);
}
else
{
Config.LogHelper.Func_WriteEventInLogFile(DateTime.Now.ToLocalTime(), enum_EventTypes.Error, "Func_GetImages", "Get Images: Ko",
string.Format("No images found for record with GUID: {0} and Image Mask Name: {1}", record.GUID, sImageMaskName));
}
bResult = true;
}
catch (Exception exception1)
{
Config.LogHelper.Func_WriteEventInLogFile(DateTime.Now.ToLocalTime(), enum_EventTypes.Error, new StackTrace(exception1).GetFrame(0).GetMethod().Name, "GeneralException",
"Source = " + exception1.Source.Replace("'", "''") + ", Message = " + exception1.Message.Replace("'", "''"));
}
return bResult;
}
The log message written when the problem occurs is on the else sentence when I check if "imagesFound.Count > 0".
This is the error message that appears sometimes:
No images found for record with GUID: 8689ffcd-46d2-4a25-ab57-edce11e45977 and Image Mask Name: 002475-20190702_070949_326
Thank you for your help.
I made some tests and it was caused by this code:
if (HttpContext.Current != null)
{
sAbsoluteImgPath = HttpContext.Current.Server.MapPath(Config.sImgDirectory);
sTargetImgPath = HttpContext.Current.Server.MapPath("~/Content/Images/Processed");
}
else
{
sAbsoluteImgPath = string.Format("{0}/", AppDomain.CurrentDomain.BaseDirectory);
sTargetImgPath = string.Format("{0}/", "~/Content/Images/Processed");
}
I solved it setting the value of "sImgDirectory" in "Web.config" to the project root dir and making the paths relative to this path stored on a static variable.
How can I assignment parameter int in Razor view in MVC. Here is my code:
<div class="pagesize">
#{
Html.Repeat(new[] { 5, 10, 15 }, ps =>
{
if (ps == Model.Search.PageSize)
{
#<span>#(ps)</span>; <-- Here I don't know how to assignment or call expression "ps"
}
else
{
##(ps);
}
}, () => { | });
<p>Items per page.</p>
}
So what code should do ... First the purpose of this line of code is to set how many row in my table I shoudl display. In this case: 5, 10 or 15 rows.
The line of code: ##(ps); shoud return number that user chose. e.g. if user click on 10; in this line #(ps) is 10; second line in else sets rest numbers to ; so if user clicked on 10, #(ps) in this second line is: first is 5, then 15; 10 skips because it is clicked already.
Thanks for help.
<div class="pagesize">
#{
Html.Repeat(new[] { 5, 10, 15 }, ps =>
{
if (ps == Model.Search.PageSize)
{
ps = 50; <-- Here I don't know how to assignment or call expression "ps"
var i = ps + 2;
var s = ps.ToString();
}
else
{
##(ps);
}
}, () => { | });
<p>Items per page.</p>
}
I am getting this error("connection to storage server failed") lines in Roundcube. I have checked everything, configurations, and database user name password, server details all are clean. can anybody tell me what could possibly be the issue? Here I am giving the whole config file.
<?php
$rcmail_config = array();
$rcmail_config['debug_level'] = 9;
$rcmail_config['log_driver'] = 'file';
$rcmail_config['log_date_format'] = 'd-M-Y H:i:s O';
$rcmail_config['syslog_id'] = 'roundcube';
$rcmail_config['syslog_facility'] = LOG_USER;
$rcmail_config['smtp_log'] = true;
$rcmail_config['log_logins'] = false;
$rcmail_config['log_session'] = false;
$rcmail_config['sql_debug'] = false;
$rcmail_config['imap_debug'] = false;
$rcmail_config['ldap_debug'] = false;
$rcmail_config['smtp_debug'] = false;
$rcmail_config['default_port'] = 143;
$rcmail_config['imap_auth_type'] = NULL;
$rcmail_config['imap_delimiter'] = NULL;
$rcmail_config['imap_ns_personal'] = NULL;
$rcmail_config['imap_ns_other'] = NULL;
$rcmail_config['imap_ns_shared'] = NULL;
$rcmail_config['imap_force_caps'] = false;
$rcmail_config['imap_force_lsub'] = false;
$rcmail_config['imap_force_ns'] = false;
$rcmail_config['imap_timeout'] = 0;
$rcmail_config['imap_auth_cid'] = NULL;
$rcmail_config['imap_auth_pw'] = NULL;
$rcmail_config['imap_cache'] = NULL;
$rcmail_config['messages_cache'] = false;
$rcmail_config['smtp_server'] = '';
$rcmail_config['smtp_port'] = 25;
$rcmail_config['smtp_user'] = '%u';
$rcmail_config['smtp_pass'] = '%p';
$rcmail_config['smtp_auth_type'] = '';
$rcmail_config['smtp_auth_cid'] = NULL;
$rcmail_config['smtp_auth_pw'] = NULL;
$rcmail_config['smtp_helo_host'] = '';
$rcmail_config['smtp_timeout'] = 0;
$rcmail_config['enable_installer'] = true;
$rcmail_config['support_url'] = 'http://poolavadi.com/';
$rcmail_config['skin_logo'] = '';
$rcmail_config['auto_create_user'] = true;
$rcmail_config['log_dir'] = 'logs/';
$rcmail_config['temp_dir'] = 'temp/';
$rcmail_config['message_cache_lifetime'] = '10d';
$rcmail_config['force_https'] = false;
$rcmail_config['use_https'] = false;
$rcmail_config['login_autocomplete'] = 0;
$rcmail_config['login_lc'] = 0;
$rcmail_config['skin_include_php'] = false;
$rcmail_config['display_version'] = false;
$rcmail_config['session_lifetime'] = 10;
$rcmail_config['session_domain'] = '';
$rcmail_config['session_name'] = NULL;
$rcmail_config['session_storage'] = 'db';
$rcmail_config['memcache_hosts'] = NULL;
$rcmail_config['ip_check'] = true;
$rcmail_config['referer_check'] = false;
$rcmail_config['x_frame_options'] = 'sameorigin';
$rcmail_config['des_key'] = 'nSfL_Rz6tc5NRMqKpw7d&A9=';
$rcmail_config['username_domain'] = 'poolavadi.com';
$rcmail_config['mail_domain'] = '';
$rcmail_config['password_charset'] = 'ISO-8859-1';
$rcmail_config['sendmail_delay'] = 0;
$rcmail_config['max_recipients'] = 0;
$rcmail_config['max_group_members'] = 0;
$rcmail_config['useragent'] = 'Roundcube Webmail/RCMAIL_VERSION';
$rcmail_config['product_name'] = 'பூளவாடி மின்னஞ்சல்';
$rcmail_config['include_host_config'] = false;
$rcmail_config['generic_message_footer'] = '';
$rcmail_config['generic_message_footer_html'] = '';
$rcmail_config['http_received_header'] = false;
$rcmail_config['http_received_header_encrypt'] = false;
$rcmail_config['mail_header_delimiter'] = NULL;
$rcmail_config['line_length'] = 72;
$rcmail_config['send_format_flowed'] = true;
$rcmail_config['dont_override'] = array();
$rcmail_config['identities_level'] = 0;
$rcmail_config['client_mimetypes'] = NULL; # null == default
$rcmail_config['mime_magic'] = NULL;
$rcmail_config['im_identify_path'] = NULL;
$rcmail_config['im_convert_path'] = NULL;
$rcmail_config['contact_photo_size'] = 160;
$rcmail_config['email_dns_check'] = false;
$rcmail_config['plugins'] = array();
$rcmail_config['message_sort_col'] = '';
$rcmail_config['message_sort_order'] = 'DESC';
$rcmail_config['list_cols'] = array('subject', 'status', 'fromto', 'date', 'size', 'flag', 'attachment');
$rcmail_config['language'] = 'en_us';
$rcmail_config['date_format'] = 'Y-m-d';
$rcmail_config['date_formats'] = array('Y-m-d', 'd-m-Y', 'Y/m/d', 'm/d/Y', 'd/m/Y', 'd.m.Y', 'j.n.Y');
$rcmail_config['time_format'] = 'H:i';
$rcmail_config['time_formats'] = array('G:i', 'H:i', 'g:i a', 'h:i A');
$rcmail_config['date_short'] = 'D H:i';
$rcmail_config['date_long'] = 'Y-m-d H:i';
$rcmail_config['drafts_mbox'] = 'Drafts';
$rcmail_config['junk_mbox'] = 'Junk';
$rcmail_config['sent_mbox'] = 'Sent';
$rcmail_config['trash_mbox'] = 'Trash';
$rcmail_config['default_folders'] = array('INBOX', 'Drafts', 'Sent', 'Junk', 'Trash');
$rcmail_config['create_default_folders'] = false;
$rcmail_config['protect_default_folders'] = true;
$rcmail_config['quota_zero_as_unlimited'] = false;
$rcmail_config['enable_spellcheck'] = true;
$rcmail_config['spellcheck_dictionary'] = false;
$rcmail_config['spellcheck_engine'] = 'pspell';
$rcmail_config['spellcheck_uri'] = '';
$rcmail_config['spellcheck_languages'] = NULL;
$rcmail_config['spellcheck_ignore_caps'] = false;
$rcmail_config['spellcheck_ignore_nums'] = false;
$rcmail_config['spellcheck_ignore_syms'] = false;
$rcmail_config['recipients_separator'] = ',';
$rcmail_config['max_pagesize'] = 200;
$rcmail_config['min_keep_alive'] = 60;
$rcmail_config['upload_progress'] = false;
$rcmail_config['undo_timeout'] = 0;
$rcmail_config['address_book_type'] = 'sql';
$rcmail_config['ldap_public'] = array();
$rcmail_config['autocomplete_addressbooks'] = array('sql');
$rcmail_config['autocomplete_min_length'] = 1;
$rcmail_config['autocomplete_threads'] = 0;
$rcmail_config['autocomplete_max'] = 15;
$rcmail_config['address_template'] = '{street}<br/>{locality} {zipcode}<br/>{country} {region}';
$rcmail_config['addressbook_search_mode'] = 0;
$rcmail_config['default_charset'] = 'ISO-8859-1';
$rcmail_config['skin'] = 'larry';
$rcmail_config['mail_pagesize'] = 50;
$rcmail_config['addressbook_pagesize'] = 50;
$rcmail_config['addressbook_sort_col'] = 'surname';
$rcmail_config['addressbook_name_listing'] = 0;
$rcmail_config['timezone'] = 'auto';
$rcmail_config['prefer_html'] = true;
$rcmail_config['show_images'] = 0;
$rcmail_config['htmleditor'] = 0;
$rcmail_config['prettydate'] = true;
$rcmail_config['draft_autosave'] = 300;
$rcmail_config['preview_pane'] = false;
$rcmail_config['preview_pane_mark_read'] = 0;
$rcmail_config['logout_purge'] = false;
$rcmail_config['logout_expunge'] = false;
$rcmail_config['inline_images'] = true;
$rcmail_config['mime_param_folding'] = 0;
$rcmail_config['skip_deleted'] = false;
$rcmail_config['read_when_deleted'] = true;
$rcmail_config['flag_for_deletion'] = false;
$rcmail_config['keep_alive'] = 60;
$rcmail_config['check_all_folders'] = false;
$rcmail_config['display_next'] = false;
$rcmail_config['autoexpand_threads'] = 0;
$rcmail_config['top_posting'] = false;
$rcmail_config['strip_existing_sig'] = true;
$rcmail_config['show_sig'] = 1;
$rcmail_config['sig_above'] = false;
$rcmail_config['force_7bit'] = false;
$rcmail_config['search_mods'] = NULL;
$rcmail_config['addressbook_search_mods'] = NULL;
$rcmail_config['delete_always'] = false;
$rcmail_config['delete_junk'] = false;
$rcmail_config['mdn_requests'] = 0;
$rcmail_config['mdn_default'] = 0;
$rcmail_config['dsn_default'] = 0;
$rcmail_config['reply_same_folder'] = false;
$rcmail_config['forward_attachment'] = false;
$rcmail_config['default_addressbook'] = NULL;
$rcmail_config['spellcheck_before_send'] = false;
$rcmail_config['autocomplete_single'] = false;
$rcmail_config['default_font'] = '';
It means dovecot is not running.
run sudo dovecot
this was the solution I got after spending hours in frustration
Try turning all the debugging options on and talk to the IMAP server directly without involving RoundCube, see this guide. That way you can be sure that your IMAP server is working before trying to get RoundCube working.
edit 15-mailboxes.conf by running
nano /etc/dovecot/conf.d/15-mailboxes.conf
add following text inside namespace inbox {} block:
namespace inbox {
inbox = yes
...
save the file and run:
service dovecot restart
and you are done..!
One possible cause is that your Dovecot installation is not working. This happened to me after changing mysql version. I had to do:
sudo apt-get install dovecot-mysql
sudo service dovecot restart
Then it worked.
I was able to solve this issue by referring to Dovecot Status.
First of all, make sure you don't use an incognito browser window, then Check Dovecot Status by running this command
service dovecot status
it will show you that:
● dovecot.service - Dovecot IMAP/POP3 email server
Loaded: loaded (/lib/systemd/system/dovecot.service; enabled; vendor preset: enabled)
Active: **inactive** (dead) since Mon 2020-03-30 21:03:32 UTC; 29min ago
Docs: man:dovecot(1)
http://wiki2.dovecot.org/
Main PID: 910 (code=exited, status=0/SUCCESS)
Then run service dovecot start
Some Devcot config files had been corrupted. So you need to fix by recreate new config file and remove existing one. Login to root by SSH through putty software
Execute these code
cd /home
/etc/init.d/dovecot stop
rm -f */imap/*/*/Maildir/dovecot*
rm -f */imap/*/*/Maildir/.*/dovecot*
rm -f */Maildir/dovecot*
rm -f */Maildir/.*/dovecot*
/etc/init.d/dovecot restart
Now you can Login into your webmail app. No error will appear.
Source
I had this issue when upgrading from Debian Jessie to Stretch. I looked in the log:
/var/log/syslog
and found that the problem was that I was disabling protocol SSLv2 explicitly, and it was not supported anymore. I removed it from the list of protocols and everything worked fine.
remove below file and login.
/etc/dovecot/conf.d/15-mailboxes.conf
or use
sudo rm -rf nano /etc/dovecot/conf.d/15-mailboxes.conf
I had the same problem after migrating to a new server, I thorough check of the config show that my IMAP and IMAPS were disabled, I simply enabled both service and restart the server.
This is how you fix it:
Check the log:
tail /var/log/dovecot.log
if you see:
Fatal: Unknown database driver 'mysql'
Meaning missing package! Dovecot requires the dovecot-mysql package to run mysql authentication. This problem is simply cured by installing it with yum:
yum install dovecot-mysql
I had same problem recently after successful installation of roundcube
first I tried these two command lines:
netstat -tulpn | grep :143
telnet localhost 143
I got connection refused error messages.
so I have to install telnet
apt-get install telnetd
After installation successful then run Restarts
/etc/init.d/openbsd-inetd restart
/etc/init.d/dovecot restart
Then again run
netstat -tulpn | grep :143
Result
tcp 0 0 0.0.0.0:143 0.0.0.0:* LISTEN 13439/dovecot
tcp6 0 0 :::143 :::* LISTEN 13439/dovecot
Try Second test run
telnet localhost 143
Result
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE START TLS AUTH=PLAIN AUTH=LOGIN] Dovecot (Ubuntu) ready.
I had faced same issue and I found solution by following.
I had checked log by following command.
tail /var/log/dovecot.log
By using above command , I found following error in log.
Sep 01 10:39:50 imap(mail#yourdomain.com): Error: user
mail#yourdomain.com: Initialization failed: Initializing mail storage
from mail_location setting failed:
mkdir(/var/vmail/yourdomain.com/mail) failed: Permission denied
(euid=101(vmail) egid=12(mail) missing +w perm: /var/vmail, dir owned
by 4325:4319 mode=0751)
so I noticed that server is unable to create the directory with name "yourdomain.com" and it require "+w" permission. I have also noticed that "yourdomain.com" directory requires ownership "vmail:mail".
Finally, Directory had been created using following command .
cd /var/vmail/;
mkdir yourdomain.com;
chown vmail:mail yourdomain.com -R;
chmod +w yourdomain.com;
That's it.
I hope this answer might help you.
I had a similar issue when setting up iRedMail dockerized version on Ubuntu 20.04.
The issue was that Dovecot was not running in the container when I checked using the command - service dovecot status. And when I tried starting the service using the command - service dovecot start I got the error
root#mail:/var/spool/postfix# service dovecot start
* Starting IMAP/POP3 mail server dovecot
Error: bind(/var/spool/postfix/private/dovecot-auth) failed: No such file or directory
Fatal: Failed to start listeners
I also ran the command below to confirm that my dovecot configuration was fine:
dovecot -n
And yes the output from the command showed that it was fine.
Here's how I fixed it:
The issue was caused by Postfix not being installed/running on the in my container which I discovered when I checked the docker logs for the container using - docker logs container-id. The file /var/spool/postfix/private/dovecot-auth which Dovecot was referencing was supposed to be created by Postfix, however, since the script to install Postfix failed because the correct path to the script was not picked when building the iRedMail image, this issue then came up as Dovecot could not find the file /var/spool/postfix/private/dovecot-auth:
[iRedMail] [Entrypoint] /docker/entrypoints/postfix.sh
/docker/entrypoints/functions.sh: line 113: /docker/entrypoints/postfix.sh: No such file or directory
[iRedMail] [Entrypoint] /docker/entrypoints/mlmmj.sh
[iRedMail] [Entrypoint] /docker/entrypoints/mlmmjadmin.sh
[iRedMail] [Entrypoint] /docker/entrypoints/iredapd.sh
[iRedMail] [Entrypoint] /docker/entrypoints/antispam.sh
mail: cannot send message: Process exited with a non-zero status
All I had to do was to pull the docker repository for iRedMail using git clone -b stable https://github.com/iredmail/dockerized, rebuilt the image in my local using docker build . --tag iredmail:latest -f dockerized/Dockerfiles/Dockerfile, and then run it. This time the correct location of my Postfix install script was picked, and the Postfix installation and setup ran fine.
And when I checked Dovecot service again using:
service dovecot start
It showed me that it was running fine.
That's all
You should remove to dovecot mail server and Use another mail services, Two services could be conflitcs therefore You must remove a mail services, I've tried to this error for 2 days.
CODE : yum remove dovecot
If you had used this code Dovecot would have remove from your server and There is not conflitcs